
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 4
find
ディレクトリ構造の 4 レベル以上深く降りないように指示します。-type f
find
通常のファイルのみを検索するように 指示します。-name 'file[AB].txt'
find
glob に一致するファイルのみを検索するように指示しますfile[AB].txt
。あるいは、
fileA.txt
または のいずれかを一致させるには、論理和 ( ) と組み合わせて括弧でグループ化されたfileB.bb
2 つのテストを使用します。-name
-o
\( -name 'fileA.txt' -o -name 'fileB.bb' \)
-execdir mv {} ../ \;
はfind
、ファイルのディレクトリに chdir してシェルコマンドを実行し、mv {} ../
をファイルの実際の名前にfind
置き換えます。この表現は、親ディレクトリを表す Unix 用語です。末尾の は、シェルコマンドの終了を示すだけです。{}
../
\;
find