¿Existe un comando de una línea para hacer que chmod sea interactivo?

¿Existe un comando de una línea para hacer que chmod sea interactivo?

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 findmás que lsporque, generalmente,el resultado del análisis lsno 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 print0indica findque 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 findy les aplica su comando.

La -L1opción indica xargsque se trabaje con un solo nombre de archivo a la vez. La -popción indica xargsque se solicite aprobación antes de continuar. La -0opción indica xargsque se utilice el carácter nulo como delimitador entre nombres de archivos.

[No conocía la -popción hasta xargsque @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'.

información relacionada