0

我在目录中有以下文件架构。

  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
4

1 回答 1

2
for dir in Directory/*; do
    program.pl "$dir/abc.xyz" > "processed/${dir##*/}-abc.xyz"
done

${dir##*/}部分从 中删除前导目录名称$dir,因此Directory/A变为A. 我添加了引号以确保带有空格的目录名称不会引起问题(一个好习惯,即使您知道没有空格)。

作为字符串 munging 的替代方法,如果您首先更改目录,则可以简化此操作:

cd Directory

for dir in *; do
    program.pl "$dir/abc.xyz" > "processed/$dir-abc.xyz"
done
于 2013-02-15T05:58:53.170 回答