Pegue todos os arquivos no diretório e para cada arquivo faça o mesmo procedimento perl

1

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?

    
por Maris 15.10.2013 / 12:49

3 respostas

2
for i in *; do perl myperlscript $i ${i%.*}.txt; done 

Ele usa regex, é claro.

    
por 15.10.2013 / 13:02
2

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
    
por 15.10.2013 / 13:07
1
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

    
por 15.10.2013 / 13:23