各ディレクトリの一部のファイルを別のディレクトリに移動する

各ディレクトリの一部のファイルを別のディレクトリに移動する

重複の可能性:
タイプ別にファイルをディレクトリとサブディレクトリから別のディレクトリに再帰的に移動する方法は?

私はLinux、特にシェルとすべてのコマンドに初めて触れました。私の目標は、各ディレクトリの一部のファイルを別のディレクトリに移動することです。より明確に言えば、

/DIR  
- /dir1  
  - file1  
  - file2  
  - ...  
- /dir2  
  - file1  
  - file2  
  - ...  
- ...  
- /dirn  
  - file1  
  - file2  
  - ... 

私にとって必要なのは、すべてのfile1とfile2を独自のディレクトリ内の新しいディレクトリに移動して、次のような結果を得ることです。

/DIR  
- /dir1
  - /mydir
      - file1  
      - file2  
  - ...  
- /dir2
  - /mydir
      - file1  
      - file2  
  - ...  

この質問については、ディレクトリ名が「dir1」、「dir2」などと同じではなく、任意の名前であると言わなければなりません。ただし、ファイル名は常に同じです(models.pyとWrappers.py)。ご協力ありがとうございます。
PS:単にコードをコピーして貼り付けるのではなく、Linuxをよりよく理解できるように答えを説明していただきありがとうございます。

ベストアンサー1

cd DIR 
for dir in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n" )
do
    cd $dir
    mkdir -p mydir
    mv *.py mydir
    cd ..
done

cd を最上位ディレクトリに移動します。 find コマンドは、指定された基準に一致するすべてのファイルを検索して印刷します。 MaxDepth と MinDepth は検索を DIR 直下のファイルに制限し、Type は結果のリストをディレクトリに制限します。 forループを使用して、findコマンドで返された各ディレクトリを繰り返します。各ディレクトリにcdし、mydirサブディレクトリを作成し、ファイルをそのディレクトリに移動し、次の繰り返しで次のディレクトリを処理できるようにDIRにcdします。

DIRの下に* .pyを含まない他のディレクトリがある場合は、cd $dir行の上にifステートメントを挿入してそのディレクトリをスキップできます。

if [ "$dir" = "skip" -o "$dir" = "whatever" ]; then continue; fi

おすすめ記事