web-dev-qa-db-ja.com

タイプ別にファイルをディレクトリとそのサブディレクトリから別のディレクトリに再帰的に移動するにはどうすればよいですか?

ディレクトリとそのすべてのサブディレクトリからファイルの種類を移動する良い方法は何でしょうか?

「/ thisdirのすべての* .oggを/ somedirに再帰的に移動する」のように。私はいくつかのことを試しました。私の最善の努力は(まだそれほど素晴らしいものではありませんでした):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

各ファイル名の前の各行に戻りました。

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'
34
Steve Burdine

xargs で検索を使用できます

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

上記のコマンドの-Iは、使用する置換文字列をxargsに指示します(そうでない場合、コマンドの最後に引数が追加されます)。

OR
コマンドでは、mvコマンドの後に「{}」を移動してみてください。

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;

27
Hemant
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

あなたはちょっとmvの引数を交換しました

13
Coding District

Zshまたはbash 4では、すべての*.oggファイルを/somedirに収集するには:

mv /thisdir/**/*.ogg /somedir

ディレクトリ階層を再現したい場合:(警告、ブラウザに直接入力)

rsync -a --Prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir