
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 find
e não ls
porque, geralmente,a análise ls
da 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
print0
dizfind
para 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
find
e aplica seu comando a eles.
A -L1
opção diz xargs
para trabalhar em apenas um nome de arquivo por vez. A -p
opção solicita xargs
a aprovação antes de continuar. A -0
opção diz xargs
para usar o caractere nulo como delimitador entre os nomes dos arquivos.
[Eu não sabia da -p
opção até xargs
que @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'.