
Estoy buscando algo como:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
O sintaxis similar.
También podría funcionar en otros comandos para los que desea una confirmación individual.
Respuesta1
Esto hace lo que estás buscando:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Esto usa find
más que ls
porque, generalmente,el resultado del análisis ls
no es confiable. Sin embargo , este formulario, que utiliza find
, funcionará con nombres de archivos incluso si contienen líneas nuevas u otros caracteres difíciles.
Explicación
find . -maxdepth 1 -type f -print0
Esto selecciona los archivos. Esto se puede personalizar utilizando cualquiera de las muchas opciones de Find. La opción
print0
indicafind
que se imprima los nombres de los archivos en una lista separada por nulos. Este es el único confiable para transmitir listas de nombres de archivos.xargs -L1 -p0 chmod +x
Esto toma la lista separada por nulos de nombres de archivos generada por
find
y les aplica su comando.
La -L1
opción indica xargs
que se trabaje con un solo nombre de archivo a la vez. La -p
opción indica xargs
que se solicite aprobación antes de continuar. La -0
opción indica xargs
que se utilice el carácter nulo como delimitador entre nombres de archivos.
[No conocía la -p
opción hasta xargs
que @kwan la señaló.]
Respuesta2
Puedes usar xargs
.
p.ej:
ls|xargs -I path -p chmod +x path
Opción -p
: Preguntar al usuario si desea ejecutar cada línea de comando y leer una línea desde la terminal. Ejecute solo la línea de comando si la respuesta comienza con 'y' o 'Y'.