Existe um comando de uma linha para tornar o chmod interativo?

Existe um comando de uma linha para tornar o chmod interativo?

Estou procurando algo como:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved

Ou sintaxe semelhante.

Também pode funcionar em outros comandos para os quais você deseja confirmação individual.

Responder1

Isso faz o que você está procurando:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x

Isso usa finde não lsporque, geralmente,a análise lsda saída não é confiável. Este formulário, usando find, entretanto, funcionará com nomes de arquivos mesmo que contenham novas linhas ou outros caracteres difíceis.

Explicação

  • find . -maxdepth 1 -type f -print0

    Isso seleciona os arquivos. Isso pode ser personalizado usando qualquer uma das muitas opções do find. A opção print0diz findpara imprimir os nomes dos arquivos em uma lista separada por nulos. Este é o único confiável para transmitir listas de nomes de arquivos.

  • xargs -L1 -p0 chmod +x

    Isso pega a lista separada por nulos de nomes de arquivos gerados finde aplica seu comando a eles.

A -L1opção diz xargspara trabalhar em apenas um nome de arquivo por vez. A -popção solicita xargsa aprovação antes de continuar. A -0opção diz xargspara usar o caractere nulo como delimitador entre os nomes dos arquivos.

[Eu não sabia da -popção até xargsque @kwan apontou.]

Responder2

Você pode usar xargs.

por exemplo:

ls|xargs -I path -p chmod +x path

Opção -p: Avise ao usuário se deve executar cada linha de comando e ler uma linha do terminal. Execute a linha de comando apenas se a resposta começar com 'y' ou 'Y'.

informação relacionada