findコマンドを使用してファイルの名前を変更する方法

findコマンドを使用してファイルの名前を変更する方法

findコマンドを使用してファイルの名前を変更しようとしています。

ファイル a の名前をファイル 10 に変更しようとしています。

これを実行するために、まず以下のコマンドを試しました。

sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-10 '{}' ';'
mv: cannot stat `test-10': No such file or directory
sps@sps-Inspiron-N5110:~$

次に、以下を試しました:

sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-a test-10 '{}' ';'
mv: target `/home/sps/test-a' is not a directory
sps@sps-Inspiron-N5110:~$

今、 でそれを実行する方法が思いつきませんfind。 でこれを実行しようとしています。同じファイル名のディレクトリが多数あるため、 を 1 つのコマンドですべてfind変更したいからです。どなたか提案してください。test-atest-10

ありがとう。

答え1

の構文はmvなのでmv <source> <target>、実行される最終コマンドはfind次のようになります。

mv test-a test-10 

したがって、最初の推測は次のようになります:

find ~ -type f -name test-a -exec mv {} test-10 \;

ただし、これは失敗します。 は{}完全なパスに展開され、現在のディレクトリで実行されるため、すべてのファイルが現在のディレクトリに移動され、上書きされます。 これを回避するには、 を、ファイルが見つかったディレクトリで実行するようにmv使用できます。-execdirmv

find ~ -type f -name test-a -execdir mv {} test-10 \;

または、ファイル名は常に同じなので:

find ~ -type f -name test-a -execdir mv test-a test-10 \;

関連情報