合并子文件夹,Linux

时间:2012-02-16 15:52:08

标签: linux file merge

我有一个主文件夹“Abc”,它有大约800个子文件夹。每个子文件夹都包含大量文件(所有格式相同,比如“.doc”)。如何使用所有这些文件创建一个主文件夹(而不是分发到子文件夹中)。我在使用cygwin终端的Windows 7机器上执行此操作。

cp -r命令复制它但将文件保留在子文件夹中,因此它并没有多大帮助。我很感激这方面的帮助。谢谢!

2 个答案:

答案 0 :(得分:5)

假设可能存在名称冲突和多个扩展,这将创建唯一的名称,将目录路径更改为破折号(例如a/b/c.doc将变为a-b-c.doc)。从要折叠的文件夹中运行此命令:

# if globstar is not enabled, you'll need it.
shopt -s globstar
for file in */**; do [ -f "$file" ] && mv -i "$file" "${file//\//-}"; done
# get rid of the now-empty subdirectories.
find . -type d -empty -delete

如果您可以保证唯一名称,则会移动文件并删除子目录。您可以将两个.更改为文件夹的名称,并从所述文件夹外部运行:

find . -depth \( -type f -exec mv -i {} . \; \) -o \( -type d -empty -delete \)

答案 1 :(得分:0)

这可能不是最优雅或最有效的方式,但我相信它可以实现你想要的目标:

for file in `find abc`
do
  if [ -f $file ]
  then
    mv $file `basename $file`
  fi
done

迭代abc中的所有内容,检查它是否是文件(不是目录),如果是,则将其从当前位置(例如abc / d / example.txt)移动到abc /

编辑:这会使所有子文件夹保持原位(但现在它们都是空的)