Isso faz o que você está procurando:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Isso usa find
em vez de ls
porque, geralmente, analisar ls
da saída não é confiável . Este formulário, usando find
, no entanto, funcionará com nomes de arquivos, mesmo que contenham novas linhas ou outros caracteres difíceis.
Explicação
-
find . -maxdepth 1 -type f -print0
Isto seleciona os arquivos. Isso pode ser personalizado usando qualquer uma das muitas opções do find. A opção
print0
informafind
para imprimir os nomes de arquivos em uma lista separada por nulo. Este é o único confiável para transmitir listas de nomes de arquivos. -
xargs -L1 -p0 chmod +x
Isso leva a lista separada por núm de nomes de arquivos gerados por
find
e aplica seu comando a eles.
A opção -L1
informa xargs
para trabalhar em apenas um nome de arquivo de cada vez. A opção -p
informa xargs
para solicitar aprovação antes de continuar. A opção -0
informa xargs
para usar o caractere nulo como o delimitador entre os nomes dos arquivos.
[Eu desconhecia a opção -p
para xargs
até que @kwan a apontasse.]