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ます。空白を含むディレクトリ名が問題を引き起こさないように引用符を追加しました (スペースがないとわかっていても、良い習慣です)。

文字列変更の代わりに、最初にディレクトリを変更すると、これを単純化できます。

cd Directory

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