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.
- Supongo que el OP usa el resultado para invocar otro comando
- 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 cadafind
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.