現在、ネストされたディレクトリ構造にある〜40kのRAW画像があります。(一部のフォルダーには、ファイルで満たされた 100 ものサブフォルダーがあります。) サブフォルダーなしで、それらすべてを 1 つのマスター ディレクトリに移動したいと考えています。を使用してこれをどのように達成できmv
ますか? スイッチが再帰的にコピーすることはわかってい-r
ますが、これによりフォルダーもコピーされ、マスターフォルダーにサブディレクトリを作成したくありません。
4 に答える
写真が/path/to/photos/
とそのサブディレクトリにあり、次に に移動し、拡張子、、、などで写真/path/to/master/
を選択する場合:.jpg
.JPG
.png
.PNG
find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -t '/path/to/master' -- {} +
拡張子でフィルタリングせず、すべて (つまり、すべてのファイル) を移動するだけの場合:
find /path/to/photos -type f -exec mv -nv -t '/path/to/master' -- {} +
既存のファイルを上書きしないための-n
オプション (気にしない場合は-v
オプション) と、それmv
が何をしているかを表示するためのオプション (非常にオプション)。
への-t
オプションmv
は、移動するすべてのファイルをコマンドの最後にスタックできるように、ターゲット ディレクトリを指定することです (の+
区切り記号を参照-exec
)。mv
サポートしていない場合-t
:
find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -- {} '/path/to/master' \;
mv
ただし、ファイルごとにのインスタンスが 1 つ作成されるため、効率が低下します。
ところで、これはファイルを移動しますが、コピーしません。
備考。
- ディレクトリ
/path/to/master
はすでに存在している必要があります (このコマンドでは作成されません)。 - ディレクトリ
/path/to/master
が にないことを確認してください/path/to/photos
。それは物事を厄介にするでしょう!
-execdir
次のオプションを利用しますfind
。
find /path/of/images -type f -execdir mv '{}' /master-dir \;
ごとにman find
:
-execdir utility [argument ...] ;
The -execdir primary is identical to the -exec primary with the exception that
utility will be executed from the directory that holds the current
file. The filename substituted for the string ``{}'' is not qualified.
-execdir
各ディレクトリから指定されたコマンドを実行するためfind
、ファイルの親パスなしでベースファイル名のみが移動されます。
find <base location of files> -type -f -name \*\.raw -exec mv {} master \;
階層が 1 レベルの深さしかない場合は、 StringSolver の自動ツールを使用する別の方法を次に示します。
mv -a firstfolder/firstfile.raw firstfile.raw
この-a
オプションは、ネスト レベル 1 のすべての類似ファイル (つまり、他のすべてのサブフォルダ) に類似変換を即座に適用します。システムを信頼できない場合は-e
、変換を説明したり-t
、すべてのファイルでテストしたりするなど、他のオプションを使用できます。
免責事項: 私は学術目的でこの作品の共著者であり、bash スクリプト レンダラーに取り組んでいます。しかし、システムはすでにテスト目的で利用可能です。