Um pouco atrasado para a festa.
Eu uso o formato abaixo para compactar meus diretórios com milhares de pequenos arquivos antes de migrar. Se você não precisar de aspas simples dentro de comandos, deve funcionar.
Com algumas modificações, tenho certeza de que será útil para alguém. Testado em Cygwin(babun)
find . -maxdepth 1 ! -path . -type d -print0 | xargs -0 -I @@ bash -c '{ tar caf "@@.tar.lzop" "@@" && echo Completed compressing directory "@@" ; }'
find .Encontre aqui
-maxdepth 1Não entre em diretórios filhos
! -path .Excluir. / O caminho do diretório atual
-type dcorresponde apenas aos diretórios
-print0Separe a saída por bytes nulos \ 0
| xargsCanalizar para xargs A
-0entrada é bytes separados por nulo O espaço
-I @@reservado é @@. Substitua @@ pela entrada. Comando
bash -c '...'Run Bash
{...}Agrupamento de comandos
&&Executar o próximo comando apenas se o comando anterior tiver sido encerrado com êxito (saída 0)
Final ;é importante, caso contrário, falhará.
Resultado:
Completed compressing directory ./Directory1 with meta characters in it
Completed compressing directory ./Directory2 with meta characters in it
Completed compressing directory ./Directory3 with meta characters in it
Atualização de julho de 2018:
Se você gosta de hacks e brincadeiras, aqui está algo interessante:
echo "a b c" > a.txt
echo "123" >> a.txt
echo "###this is a comment" >> a.txt
cat a.txt
myCommandWithDifferentQuotes=$(cat <<'EOF'
echo "command 1: $@"; echo 'will you do the fandango?'; echo "command 2: $@"; echo
EOF
)
< a.txt xargs -I @@ bash -c "$myCommandWithDifferentQuotes" -- @@
Resultado:
command 1: a b c
will you do the fandango?
command 2: a b c
command 1: 123
will you do the fandango?
command 2: 123
command 1: ###this is a comment
will you do the fandango?
command 2: ###this is a comment
Explicação:
- Crie um script de liner único e armazene-o em uma variável
- xargs leia a.txte execute-o como bashscript
- @@ garanta que toda vez que uma linha inteira seja passada
- Colocar @@após --garanta que @@seja tomado como entrada de parâmetro posicional para o bashcomando, não um bashinício OPTION, ou seja, como -cele, o que significarun command
--é mágico, funciona com muitas outras coisas, ou seja ssh, atékubectl