/var/www/uploads/
の名前にMathまたはPhysicsを含む/mnt/Backup/
内のすべてのフォルダーをmv
する簡単なシェルスクリプトを探しています] _。
これによるとSO投稿: xargsを使用して「find」ディレクトリを別のディレクトリに移動する
私は次のようなものを使用します:
find /var/www/uploads/ -type d \( -name '*Physics*' -o -name '*Math*' \) \
-exec mv -t /mnt/Backup/ {} +
これにより、/var/www/uploads
フォルダ内の任意の深さのディレクトリが検索され、バックアップディレクトリに移動されます。
検索を最初のレベルに制限したい場合は、オプション-maxdepth 1
を見つけるために追加できます
find /var/www/uploads/ -maxdepth 1 -type d \( -name '*Physics*' -o -name '*Math*' \) \
-exec mv -t /mnt/Backup/ {} +
また、大文字と小文字を区別しない検索が必要な場合は、-iname
の代わりに引数-name
を使用できるため、次のようになります。
find /var/www/uploads/ -type d \( -iname '*Physics*' -o -iname '*Math*' \) \
-exec mv -t /mnt/Backup/ {} +
注:
これは、GNUまたはFreeBSDfind
およびmv
(-iname
、-maxdepth
)の最近のバージョンでのみ機能します。および-t
は標準ではありません)。
また、\
を使用して、コマンドラインにジャンプラインを追加し、読みやすくします。
コマンドをよく理解したい場合は、試してみてください このExplainShellリンク
UNIXコマンドfind
とオプション-d
を使用してディレクトリのみを検索し、コマンドを実行してディレクトリを/ mnt/Backupに移動するように指示します。正規表現を使用して1つのステップで実行する代わりに、次のようにコマンドを2回実行するだけです。
find /var/www/uploads -type d -name "*Math*" -exec mv {} /mnt/Backup/ \;
find /var/www/uploads -type d -name "*Physics*" -exec mv {} /mnt/Backup/ \;
多数のディレクトリ名に対して同じことを行い、名前を繰り返す必要がないようにする場合は、代わりに変数を使用できます。
for name in Math Physics; do find /var/www/uploads -d -name "*${name}*" -exec mv {} /mnt/Backup/ \;