別の場所に同じ名前のファイルを持つファイルシステムツリーがあります。コマンドラインで次のコマンドを試しました。
find / -name "HAHA" -exec mv {} /home \;
1つのファイルでのみ機能し、別のファイルの場合は同じ名前のエラーメッセージが表示されます。
各ファイル名に数字を追加して区別するようにコマンドを変更できますか?
ベストアンサー1
2つの考えられる解決策を考えることができます。
出身
mv
ならGNUコアツール(そうである可能性があります)次に、次のコマンドを実行します。find / -name "HAHA" -type f -exec mv --backup=numbered "{}" /home \;
...呼び出したすべてのファイルを.this
HAHA
に移動します。/home
--backup=numbered
オプションofは、コマンドが実行されるmv
たびに、mv
指定されたファイルがターゲットディレクトリにすでに存在することを確認しますHAHA
。その場合は、新しいファイルをに移動する前に、最初に名前をHAHA.~n~
(増えた数字)に変更します。最後に、そのような名前のファイルを取得します。n
/home
HAHA
HAHA.~1~
HAHA.~2~
/home
このシェルスクリプトはトリックを実行する必要がありますが、改行文字を含むパスに抵抗しません。
IFS=" " # if you are using bash, you can just use IFS=$'\n' here i=1 for file in $(find / -name "HAHA" -type f); do mv "${file}" "/home/HAHA${i}" i=$((${i} + 1)) done
HAHA
これはすべてのファイルを繰り返し、各ファイルをに移動します/home/HAHAn
。ここでn
数字は再び1から増加し始めます。