我有一个目录,里面有多个文件 。 a1
,,bb2
ccc3
目前我手动执行:
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