我想用命令行合并这些文件夹的内容。
.
├── 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
。