0

findコマンドでいくつかのファイルを見つけることができました。ファイルのタイプはfile_sakfksanf.txt、file_afsjnanfs.pdf、file_afsnjnjans.cppです。ここ で、renameおよび-execコマンドを 使用してファイルの名前をmywish_sakfksanf.txt、mywish_afsjnanfs.pdf、mywish_afsnjnjans.cppに 変更します。 。私はしばらくの間努力しているので、愚かであると私を責めないでください。

4

2 に答える 2

5

のページの-execセクションを読むと、一致を 内の引数として使用できる文字列に出くわします。これにより、次の方法でマッチに使用できます。manfind{}-execrenamefind

find . -name 'file_*' -exec rename 's/file_/mywish_/' {} \;

マニュアルから:

-実行コマンド;

コマンドを実行します。0 ステータスが返される場合は true。次の検索引数はすべて、{}' で構成される;' is encountered. The string引数が、単独の引数だけでなく、コマンドの引数に出現するすべての場所で処理中の現在のファイル名に置き換えられるまで、コマンドの引数と見なされます。 find の一部のバージョンでは。これらの構造は両方とも、シェルによる展開から保護するために (`\' で) エスケープするか、クォートする必要があるかもしれません。-exec オプションの使用例については、例のセクションを参照してください。指定されたコマンドは、一致したファイルごとに 1 回実行されます。コマンドは開始ディレクトリで実行されます。-exec アクションの使用には、避けられないセキュリティ上の問題があります。代わりに -execdir オプションを使用してください。

あなたは find/exec ソリューションを求めましたが、Mark Reedが提案したように、結果を にパイプすることを検討することをお勧めしますxargs。その場合は、ファイル名に空白またはシェルのメタ文字が含まれていることによる予期しない動作を回避するために、必ず オプションと または または オプションを使用-print0find-0ください-nullxargsまた、これは の POSIX 仕様であるため、(マニュアルにもある)の+バージョンを使用することを検討してください。また、同様の方法でコマンド ラインを構築することで、 の呼び出しが少なくなります。-execfindxargsrename

于 2012-09-29T18:07:37.470 に答える
0

find だけでこれを行う方法があるとは思わないでください。スクリプトを作成する必要があります。

#!/bin/bash
NEW=`echo $1 | sed -e 's/file_/mywish_/'`
mv $1 ${NEW}

次に、次のことができます。

find ./ -name 'file_*' -exec my_script {} \;
于 2012-09-29T17:37:58.707 に答える