O caminho mais curto com o GNU parallel
:
parallel --no-notice 'cp "{}" "t-{}"' ::: *.md
Exemplo:
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
└── s4
4 directories, 6 files
Eu quero copiar f1.md/f2.md/f3.md
no diretório atual e os resultados serão t-f1.md/t-f2.md/t-f3.md
. (prefixo é t-
)
Tentando e Esperança:
for file in *md;do cp -a $file t-$file;done
obterá resultado, mas parece muito longo usando for
loop. Espero que haja um comando mais curto e simples para obter os mesmos resultados.
Para copiar os arquivos, o loop que você já tem é o caminho mais curto para fazê-lo. Se você quiser fazer isso sem o loop, você pode combinar cp
rename
e mv
mkdir tmp
cp -a *.md tmp
(cd tmp && rename '' 't-' tmp/*.md)
mv temp/*.md .
Isto reduz os comandos que você tem que executar (somente um comando cp contra um para cada arquivo), isto pode ou não tornar o programa mais rápido para executar - você precisaria fazer benchmark dele. Mas falhará se você tiver um número muito grande de arquivos quando passarmos todos os arquivos para cp
rename
e mv
.
com mmv
/ mcp
:
mcp '*.md' t-#1.md
dado
$ tree .
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
└── s4
0 directories, 10 files
Então
$ mcp -v '*.md' t-#1.md
f1.md -> t-f1.md : done
f2.md -> t-f2.md : done
f3.md -> t-f3.md : done
resultando em
$ tree .
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
├── s4
├── t-f1.md
├── t-f2.md
└── t-f3.md
0 directories, 13 files
Tags command-line cp shell