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-a
test-10
ありがとう。
答え1
の構文はmv
なのでmv <source> <target>
、実行される最終コマンドはfind
次のようになります。
mv test-a test-10
したがって、最初の推測は次のようになります:
find ~ -type f -name test-a -exec mv {} test-10 \;
ただし、これは失敗します。 は{}
完全なパスに展開され、現在のディレクトリで実行されるため、すべてのファイルが現在のディレクトリに移動され、上書きされます。 これを回避するには、 を、ファイルが見つかったディレクトリで実行するようにmv
使用できます。-execdir
mv
find ~ -type f -name test-a -execdir mv {} test-10 \;
または、ファイル名は常に同じなので:
find ~ -type f -name test-a -execdir mv test-a test-10 \;