for i in *; do perl myperlscript $i ${i%.*}.txt; done
Ele usa regex, é claro.
Eu tenho dir, onde estão vários arquivos.
a1
, bb2
, ccc3
No momento, faço manualmente:
perl myperscitpt.pl a1 a1.txt
perl myperscitpt.pl bb2 bb2.txt
perl myperscitpt.pl ccc3 ccc3.txt
Como eu poderia fazer isso com um script de shell do Linux?
você precisará procurar loops. Este guia é excelente: link
Assim, para cada arquivo você pode escrever um loop como este:
for fn in *;
do
# do something with the file names and files
# make the output filename
ofn=${fn}.txt
# run the perl thingy
perl myperscitpt.pl $fn $ofn
done
find /home/user/my/folder -type f -exec perl myperscitpt.pl "{}" "{}.txt" \;
Este comando encontrará todos os arquivos em um diretório (e subdiretório) e executará seu script perl.
find /home/user/my/folder -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;
Você pode substituir /home/user/my/folder
por um ponto .
se quiser pesquisar na pasta atual.
{}
é o caminho para o nome do arquivo (e o nome do arquivo).
\;
é necessário quando você usa -exec no final do comando
-type f
significa localizar arquivos (não diretórios)
-iname "a*" -or -iname "b*" -or -iname "c*"
significa procurar por arquivos que começam com a ou b ou c. -iname
é insensível a maiúsculas e minúsculas , -name
faz distinção entre maiúsculas e minúsculas.
Este comando irá procurar em subdiretórios também. Se você não quiser pesquisar em subdiretórios, defina o -maxdepth
(use-o como primeiro argumento no comando find):
find /home/user/my/folder -maxdepth 1 -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;
find é um poderoso comando com muitas opções, veja o manual: link