.txt
ファイルの種類を特定のフォルダに移動するスクリプトがあります。作業フォルダ内のファイルを見つけて、完成したフォルダに移動します。
たとえば、.txt
フォルダ/tmp/swan/test/work
とフォルダにファイルがある場合は、/tmp/swan/test11/work
そのファイルをそれぞれ/tmp/swan/test/completed
に移動する必要があります/tmp/swan/test11/completed
。
.txt
また、サブフォルダに対応するファイルがある場合は、/tmp/swan/test11/work/APX
そのファイルもに移動する必要があります/tmp/swan/test11/completed
。
以下は私のスクリプトです。スクリプトは作業フォルダ内のファイルを正しく移動しますが、サブフォルダ(つまり作業/完了フォルダ)から対応する完了フォルダにファイルを移動しません。
#!/bin/bash
MY_DIR=/tmp/swan
cd $MY_DIR
find . -path "*work*" -iname "*.txt" -type f -execdir mv '{}' ../completed \;
答え1
仮説
- 入れ子になった作業ディレクトリではありません
- 興味深い名前はありません
努力する
MY_DIR=/tmp/swan
cd $MY_DIR
for w in */work
do
find $w -path "*work*" -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done
これにより、ファイルは「work」と同じ3番目の名前「completed」という4番目のレベルのディレクトリに転送されます。
作業ディレクトリがネストされていないがランダムレベルにある場合
MY_DIR=/tmp/swan
cd $MY_DIR
find $MY_DIR -type d -name \*work\* -print | while read w
do
find $w -path "*work*" -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done