我在一个目录中有以下文件结构。
Directory
/A/abc.xyz
/B/abc.xyz
/C/abc.xyz
/D/abc.xyz
/E/abc.xyz
我想在每个子目录中的 acb.xyz 上执行一个程序。将输出文件保存在不同的目录中,即 Directory/processed
,在输出文件的名称中附加子目录的名称。
可以这样写吗?需要更正。
for i in `ls "Directory/"`
do
program.pl $i/abc.xyz > processed/$i-abc.xyz
done
最佳答案
for dir in Directory/*; do
program.pl "$dir/abc.xyz" > "processed/${dir##*/}-abc.xyz"
done
${dir##*/>
部分从 $dir
中剥离了前导目录名称,因此 Directory/A
变成了 A
。我添加了引号以确保带有空格的目录名称不会引起问题(这是一个好习惯,即使您知道没有空格)。
作为字符串修改的替代方案,如果您首先更改目录,您可以简化此操作:
cd Directory
for dir in *; do
program.pl "$dir/abc.xyz" > "processed/$dir-abc.xyz"
done
关于linux - 在子目录中的文件上执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889052/