我有一个名为“Abc”的主文件夹,其中包含约800个子文件夹。每个子文件夹都包含许多文件(格式完全相同,例如“.doc”)。如何创建一个主文件夹,其中包含所有这些文件(而不是分布在子文件夹中)。我正在使用cygwin终端在Windows 7机器上执行此操作。
使用
使用
cp -r
命令可以复制文件,但会使文件保留在子文件夹中,因此没有什么帮助。我需要协助解决此问题。谢谢!假设存在名称冲突和多个扩展名,这将创建唯一的名称,将目录路径更改为破折号(例如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 \)
这可能不是最优雅或高效的方法,但我相信它能实现你想要的:
for file in `find abc`
do
if [ -f $file ]
then
mv $file `basename $file`
fi
done
遍历abc中的所有内容,检查它是否为文件(而不是目录),如果是,则将其从当前位置移动(例如abc/d/example.txt)到abc/。
编辑:这将保留所有子文件夹(但现在它们将为空)。
find abc -type f | xargs -I {} mv {} flat
这将把所有文件移动到名为flat的目录中。 - user1033563