このコマンドは、1つ以上のフォルダの内容を親フォルダに移動します。ただし、同じ名前、同じ拡張子を持つファイルがあると、移動中に上書きされるファイルがあります。
find . - mindepth 2 -type f -exec mv "{}" . \; && fin d . - type d -empty -delete
重複したファイル名を持つファイルを上書きせずに(1)、(2)、(3)などを追加するようにこのコマンドを変更するにはどうすればよいですか?
答え1
答え2
このスクリプトをすべてのファイルを保存する最上位ディレクトリにコピーし、実行可能にしてから実行します。
#!/bin/bash
## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1
## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)
## Checking which files need to be renamed
while [[ $list != '' ]] ; do
##Remaming the un-moved files to unique names and move the renamed files
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
current_file=$(basename $file)
mv -n $file "./${nr}${current_file}"
done
## Incrementing counter to prefix to file name
nr=$((nr+1))
list=$(find . -mindepth 2 -type f -print)
done