衝突時のコピーと名前の変更

衝突時のコピーと名前の変更

コマンドラインを使用してこのフォルダの内容をマージしたいと思います。

.
├── folder1
│   │ file.txt
├── folder2
│   │ file.txt
└───folder3
    │ file.txt

どうすればいいですか?

答え1

cpついに私はこれを使ってこれをすることができました--backupバナー。

cp --backup=numbered */*.txt new_directory/

答え2

次のコマンドラインループは、現在のディレクトリにあるフォルダ「folder *」の各フォルダの(最上位)コンテンツを「new_directory」というディレクトリにコピーします。デフォルトでは、globは/*「ドットファイル」と一致しません。shopt -s dotglobこの動作を変更するには。同じ(デフォルト)ファイル名がnew_directoryにすでに存在する場合は、ターゲットファイルの前に元のフォルダ(および下線)を追加して一意にします。

1行にすべて:

for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done

読みやすいように分類:

for f in folder*/*
do 
  [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
  [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done

計画があれば移動するただ元の場所からファイルをcp変更しますmv

関連情報