2つの特定のファイルを、一意の名前を持つ複数のディレクトリ内の親フォルダに移動する

2つの特定のファイルを、一意の名前を持つ複数のディレクトリ内の親フォルダに移動する

2 つの特定のファイル (fileA.txt と fileB.sh と呼ぶ) を親フォルダーに移動する必要があります。

これらのファイルのうち 1 つは汎用ですが、もう 1 つのファイルは親フォルダーに固有のものであり、すべてのフォルダーにコピーすることはできません。

フォルダ階層は次のようになります。フォルダ階層

親フォルダは一意であり、同じままである必要があります。子フォルダを含む 200~300 個の親フォルダのサブフォルダには、合計 2000 個を超えるフォルダがあります。

これまでのところ、BASH で動作していないのは次の通りです。

find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.

私はスクリプト作成の初心者ですが、これが非常に簡単な作業であることはわかっています。ひどい絵で申し訳ありませんが、長い間壁に頭をぶつけていました。

答え1

fileA.txtまたはという名前のファイルをfileB.txtその直下の親ディレクトリに移動するには:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

fileA.txtまたは、または という名前のファイルをfileB.bbその直下の親ディレクトリに移動するには、次のようにします。

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

使い方

  • .現在のディレクトリから開始するように指示しますfind。(任意のディレクトリに置き換えることができます。

  • -maxdepth 4findディレクトリ構造の 4 レベル以上深く降りないように指示します。

  • -type ffind通常のファイルのみを検索するように 指示します。

  • -name 'file[AB].txt'findglob に一致するファイルのみを検索するように指示しますfile[AB].txt

    あるいは、fileA.txtまたは のいずれかを一致させるには、論理和 ( ) と組み合わせて括弧でグループ化されたfileB.bb2 つのテストを使用します。-name-o

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;find、ファイルのディレクトリに chdir してシェルコマンドを実行し、mv {} ../をファイルの実際の名前にfind置き換えます。この表現は、親ディレクトリを表す Unix 用語です。末尾の は、シェルコマンドの終了を示すだけです。{}../\;find

関連情報