特定のファイルタイプだけを探してドライブをクロールし、どこかに保存するには、コマンド ライン cp または rsync を使用しますか?

特定のファイルタイプだけを探してドライブをクロールし、どこかに保存するには、コマンド ライン cp または rsync を使用しますか?

cpまたはコマンドのようなものをコマンド ラインのみで使用して、rsyncハード ドライブをクロールし、画像/ビデオ ファイルのみを検索することは可能ですか? また、それらを別の場所にコピーするプロセスで、新しい場所のフォルダー名/パスが保持される可能性はありますか?

古いハードドライブがいくつかあり、そこに保存されている写真やビデオのバックアップを取りたいのですが、それらは何千ものフォルダーに分散しており、できればコンピューターに面倒な作業のほとんどをやらせたいのですが、まだコマンド ラインとその素晴らしい機能について学んでいるところです。

答え1

find興味のあるファイルを検索するには、次のように使用できます。

find /mnt/hd1 -name \*.jpg

/mnt/hd1 ディレクトリ内の jpg ファイル (拡張子が .jpg のファイル) を検索します。これらのファイルを単にどこかにコピーしたい場合は、次の操作を実行できます。

find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest

これにより、cp/mnt/dest ディレクトリで見つかったすべてのファイルに対してコマンドが実行されます。

それが役に立てば幸い :)

答え2

1 つのスクリプトに自動化したくない場合は、別の方法として、find コマンドを使用して bash スクリプトを作成します。次に、bash スクリプトを実行します。この方法では、ファイルの出所もわかります。

また、ご使用の環境でファイル名が重複している可能性がある場合は、念のため上記を少し変更してください。スクリプトでエラー チェックを行う必要があります。

また、ディレクトリ パスを保持しますか?

つまり、ファイルがここにある場合

/ソース/a/b/c/d/e.jpg

コピーしますか?

/dest/a/b/c/d/e.jpg ?

または

/dest/e.jpg ?

例えば、

find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh

これは、1つのディレクトリ /backup にのみコピーされます。

保存するには、次のようにします

(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh

しかし、まずはすべてのディレクトリを作成する必要があります

(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh

これを実行する利点は、実際にコマンドを実行する前にスクリプトを目で確認して、すべてがうまくいっているかどうかを確認できることです。私は、コマンドを実行して、予想外の結果に何度も悩まされました :)

さらに、スクリプトがあれば、自分が何をするのかの記録も残ります。

関連情報