タイプ別にファイルをディレクトリとサブディレクトリから別のディレクトリに再帰的に移動する方法は?

タイプ別にファイルをディレクトリとサブディレクトリから別のディレクトリに再帰的に移動する方法は?

ディレクトリとすべてのサブディレクトリからファイル形式を移動するための良い方法は何ですか?

「/thisdirのすべての*.oggを/somedirに再帰的に移動する」と同じです。私はいくつか試しましたが、全力を尽くしました(まだそれほど良くありませんでした)。

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

各ファイル名の前に各行を返します。

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

答え1

次のように find を使用できます。パラメータそのために

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

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

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

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

答え2

zshまたはbash 4で、すべての*.oggファイルを次の場所に収集します/somedir

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

ディレクトリ階層を再現するには:(警告、ブラウザに直接入力してください)

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

答え3

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

mvのパラメータを変更しました。

答え4

「ディレクトリが空ではありません。」エラーが発生します。この問題を解決するには、次を実行します。

find . -name 'node_modules' -type d -prune -exec mkdir -p ./another/dir/{} \; -exec mv -i {} ./NODE_MODULES/{} \;

これにより、ディレクトリ構造が保存されます。

関連情報