Quiero hacer algo repetidamente en una lista de archivos. Los archivos en las preguntas tienen espacios en sus nombres:
david@david: ls -l
total 32
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha
-rw-rw-r-- 1 david david 0 Mai 8 11:55 haha~
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (3rd copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (4th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (5th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (6th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (7th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (another copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (copy)
Ahora quiero anotar cada uno de estos archivos:
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(Uso echo y una tubería para escribir comandos de varias líneas).
Cuando hago eso, funciona correctamente en aquellos archivos que no tienen espacios en sus nombres. Pero los otros ...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
Cambiar $(ls)a "$(ls)"o $filepara "$file"no funciona. ¿Que puedo hacer?
Editar:
echo '
for files in *
do
stat "$files"
done' | bash
¡Hace el truco! Como soy nuevo en bash, quiero mantener las cosas lo más simples posible, así que nada con tratar de escapar de espacios, o usar xargso la solución read -r, aunque resuelvan el problema.
Como algunos han preguntado: Sí, usar esto en lugar de stat *es extraño. Pero solo quería encontrar una forma general de aplicar el mismo comando en un grupo de nombres de archivo en bash, usando un bucle for. Entonces statpodría significar gzip, gpgo rm.
stat *? (;-)