获取目录中的所有文件,并对每个文件执行相同的 perl 程序

获取目录中的所有文件,并对每个文件执行相同的 perl 程序

我有一个目录,里面有多个文件 。 a1,,bb2ccc3

目前我手动执行:

perl myperscitpt.pl a1 a1.txt
perl myperscitpt.pl bb2 bb2.txt
perl myperscitpt.pl ccc3 ccc3.txt

我怎样才能通过 Linux Shell 脚本做到这一点?

答案1

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

当然,它使用正则表达式。

答案2

您需要研究 for 循环。本指南非常棒:http://www.tldp.org/LDP/abs/html/abs-guide.html#EX22

因此,对于每个文件,你可以编写如下循环:

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

答案3

find /home/user/my/folder -type f -exec perl myperscitpt.pl "{}" "{}.txt" \;

此命令将查找目录(和子目录)下的所有文件并执行您的 perl 脚本。

find /home/user/my/folder -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

如果您想搜索当前文件夹,您可以/home/user/my/folder用点代替。.

{}是文件名的路径(和文件名)。

\;在命令末尾使用 -exec 时是必需的

-type f表示查找文件(不是目录)

-iname "a*" -or -iname "b*" -or -iname "c*"表示搜索以 a 或 b 或 c 开头的文件-iname不区分大小写-name区分大小写。

此命令将在子目录中搜索也可以。如果您不想在子目录中搜索,请设置-maxdepth(将其用作 find 命令中的第一个参数):

find /home/user/my/folder -maxdepth 1 -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;

find 是一个功能强大的命令,具有很多选项,请参阅手册:http://www.gnu.org/software/findutils/manual/html_mono/find.html#Finding-Files

相关内容