フォルダとサブフォルダのファイルを同じ宛先フォルダに移動する

フォルダとサブフォルダのファイルを同じ宛先フォルダに移動する

.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

関連情報