uso sentencias script programacion las invertida funcion escapar encomillado doble control comillas comilla bash unix find xargs

bash - programacion - sentencias de control en shell script



¿Cómo dar salida a los nombres de archivo entre comillas en la línea SINGLE? (7)

Esto debería funcionar

find $PWD | sed ''s/^/"/g'' | sed ''s/$/"/g'' | tr ''/n'' '' ''

EDITAR:

Esto debería ser más eficiente que el anterior.

find $PWD | sed -e ''s/^/"/g'' -e ''s/$/"/g'' | tr ''/n'' '' ''

La solución de @ Timofey funcionaría con un tr al final, y debería ser la más eficiente.

find $PWD -exec echo -n ''"{}" '' /; | tr ''/n'' '' ''

Me gustaría mostrar la lista de elementos en una carpeta de la siguiente manera:

"filename1" "filename2" "file name with spaces" "foldername" "folder name with spaces"

En otras palabras, los nombres de los elementos deben estar en una sola línea, rodeados por comillas (simples o dobles) y divididos por espacios.

Yo sé eso

find . | xargs echo

imprime la salida en una sola línea, pero no sé cómo agregar comillas alrededor del nombre de cada elemento.

Este código es parte de un script bsh. Por lo tanto, la solución puede ser un conjunto de comandos y usar archivos temporales para almacenar resultados intermedios.

Muchas gracias por cualquier sugerencia.

Saludos ana


Prueba esto.

find . -exec echo -n ''"{}" '' /;


Puede usar la opción GNU ls --quoting-style para obtener fácilmente lo que está buscando. Desde la página del manual:

--quoting-style=WORD

use el estilo de WORD para los nombres de las entradas: literal , locale , shell , shell-always , shell-escape , shell-escape-always , c , escape

Por ejemplo, al usar el comando ls --quoting-style=shell-escape-always , su salida se convierte en:

''filename1'' ''filename2'' ''file name with spaces'' ''foldername'' ''folder name with spaces''

Usando --quoting-style=c , puede reproducir exactamente el ejemplo deseado. Sin embargo, si la salida va a ser utilizada por un script de shell, debe usar uno de los formularios que escapa correctamente de caracteres especiales, como shell-escape-always .


También puedes usar simlpy para encontrar "-printf", como en:

find . -printf "/"%p/" " | xargs your_command

dónde:

%p File''s name.

Esto rodeará todos los archivos encontrados con citas y separará cada elemento con un espacio. Esto evita el uso de múltiples comandos.


tratar

ls | sed -e ''s/^/"/g'' -e ''s/$/"/g'' | tr ''/n'' '' ''


EDITAR:
La siguiente respuesta genera una LISTA separada de nueva línea en lugar de una sola línea.

  1. Supongo que el OP usa el resultado para invocar otro comando
  2. convertir la LISTA de salida a una sola línea es fácil ( | tr ''/n'' '' '' )

Un método menos mencionado es usar la opción -d ( --delimiter ) de xargs :

find . | xargs -I@ -d"/n" echo /"@/"

-I@ captura el resultado de cada find como @ y luego lo repetimos con comillas

Con esto puedes invocar cualquier comando al igual que agregaste comillas a los argumentos.

$ find . | xargs -d"/n" testcli.js [ "filename1", "filename2", "file name with spaces", "foldername", "folder name with spaces" ]

Consulte https://.com/a/33528111/665507


for f in *; do printf "''%s'' " "$f"; done; echo

O bien, gracias a Gordon Davisson :

printf "''%s'' " *; echo

El echo final es simplemente agregar una nueva línea a la salida.