7

現在、ネストされたディレクトリ構造にある〜40kのRAW画像があります。(一部のフォルダーには、ファイルで満たされた 100 ものサブフォルダーがあります。) サブフォルダーなしで、それらすべてを 1 つのマスター ディレクトリに移動したいと考えています。を使用してこれをどのように達成できmvますか? スイッチが再帰的にコピーすることはわかってい-rますが、これによりフォルダーもコピーされ、マスターフォルダーにサブディレクトリを作成したくありません。

4

4 に答える 4

15

写真が/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。それは物事を厄介にするでしょう!
于 2013-11-09T18:12:09.550 に答える
1

-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、ファイルの親パスなしでベースファイル名のみが移動されます。

于 2013-11-09T18:11:37.087 に答える
0
find <base location of files> -type -f -name \*\.raw -exec mv {} master \;
于 2013-11-09T18:11:55.033 に答える
0

階層が 1 レベルの深さしかない場合は、 StringSolver の自動ツールを使用する別の方法を次に示します。

mv -a firstfolder/firstfile.raw firstfile.raw

この-aオプションは、ネスト レベル 1 のすべての類似ファイル (つまり、他のすべてのサブフォルダ) に類似変換を即座に適用します。システムを信頼できない場合は-e、変換を説明したり-t、すべてのファイルでテストしたりするなど、他のオプションを使用できます。

免責事項: 私は学術目的でこの作品の共著者であり、bash スクリプト レンダラーに取り組んでいます。しかし、システムはすでにテスト目的で利用可能です。

于 2014-01-27T15:16:57.117 に答える