これらのフォルダーの内容をコマンド ラインでマージしたいと思います。
.
├── 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 に既に存在する場合は、一意になるように、コピー先のファイルに元のフォルダ (およびアンダースコア) のプレフィックスが付けられます。
すべてを一行で:
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
。