ファイルシステムに散在する同じ名前のすべてのファイルを1つのフォルダに移動するには?

ファイルシステムに散在する同じ名前のすべてのファイルを1つのフォルダに移動するには?

別の場所に同じ名前のファイルを持つファイルシステムツリーがあります。コマンドラインで次のコマンドを試しました。

find / -name "HAHA" -exec mv {} /home \;

1つのファイルでのみ機能し、別のファイルの場合は同じ名前のエラーメッセージが表示されます。

各ファイル名に数字を追加して区別するようにコマンドを変更できますか?

ここに画像の説明を入力してください。

ベストアンサー1

2つの考えられる解決策を考えることができます。

  1. 出身mvならGNUコアツール(そうである可能性があります)次に、次のコマンドを実行します。

    find / -name "HAHA" -type f -exec mv --backup=numbered "{}" /home \;
    

    ...呼び出したすべてのファイルを.thisHAHAに移動します。/home--backup=numbered オプションofは、コマンドが実行されるmvたびに、mv指定されたファイルがターゲットディレクトリにすでに存在することを確認しますHAHA。その場合は、新しいファイルをに移動する前に、最初に名前をHAHA.~n~(増えた数字)に変更します。最後に、そのような名前のファイルを取得します。n/homeHAHAHAHA.~1~HAHA.~2~/home

  2. このシェルスクリプトはトリックを実行する必要がありますが、改行文字を含むパスに抵抗しません。

    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から増加し始めます。

おすすめ記事