碰撞时复制并重命名

碰撞时复制并重命名

我想用命令行合并这些文件夹的内容。

.
├── 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

如果您打算移动文件从其原始位置,只需将 更改cpmv

相关内容