find コマンドを使用したファイル名の変更

find コマンドを使用したファイル名の変更

10K mp4ファイルのリストがありますが、いくつかは?タグが含まれています。 _(下線)に置き換える必要があります。

findコマンドを使用してこれらのファイルを見つけることができますが、名前を変更できるかどうかはわかりません。

find . -name "*\?*.mp4" -exec mv {} XXXXXXX \;

findから返されたリストを繰り返す必要があり、交換する必要がある各リストを繰り返す必要があると思いますか? _を使用しますが、どうすればいいかわかりません。

ベストアンサー1

これには使用しないでくださいfind。どちらの方向に行っても、ファイルごとに1つのようなものが必要ですfindmvプロセスがたくさん必要ですが、役に立たない。言うまでもなく、そうするのはもっと難しいです。とにかくそれは私の意見です。

私はストリーミングまたはバッチ処理ツールを使用しており、以下を好む傾向がありますpax

cd -P . && mkdir ../newmp4 &&
pax -rwls'|?|_|g' . "${PWD%/*}/newmp4"

ディレクトリを作成できる場合、../newmp4この小さなスクリプトはハードリンクを使用して作成したディレクトリにルートを持つツリーをミラーリングするだけでなく、.すべてのファイル名を下線に置き換えます。?

これにより得られる利点の1つ両方その後もツリーは存在し続けます。現在、ディレクトリのルートにあるファイルは影響を受けません。ツリーのミラーリングされたバージョンでのみ変更されます。したがって、削除するツリーのバージョンを決定する前に結果を確認できます。手順中に問題が発生しても害はありません。

ただし、これにはハードリンクをサポートし、少なくとも+ 2サブディレクトリだけ残っている空のinodeを持つファイルシステムが必要です。ただし、すべてのサブディレクトリが同じファイルシステムマウントを共有しているとします... ..

rsync私はそれほど単純ではないと思いますが、実際に同じ効果を得ることは可能だと思います。持っていない場合pax (あなた本物 しなければならない)、あなたはそれを得ることができます。ミラビロス維持する(私の知る限り)最大一般的に使用されるバージョンLinuxシステムで。

おすすめ記事