此命令会将一个或多个文件夹的内容移动到父文件夹。但是,如果存在具有相同扩展名的相同文件名,则在移动过程中会有文件被覆盖。
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