我有一个文件夹,其中有大约一百个子文件夹,并且每个子文件夹又有 10 到 20 个子文件夹,因此总的来说这是一个相当大的文件夹树。
有没有一种简单的方法可以将树中的所有文件展开或导出到一个新文件夹中,该文件夹将只是一个包含文件的文件夹(没有文件夹,没有树)?
我正在运行 OS X 10.8,尽管我也有 Parallels,所以如果有 Windows 解决方案,我就可以运行它,因为这不是我每天需要做的事情。
答案1
在 OS X 中,这应该可以工作:
find /top/source/directory -type f -exec mv {} /destination/directory \;
该find
命令搜索文件夹 的所有子目录/top/source/directory
,并仅查找文件(选项-type f
)。当它找到一个文件时,它会对刚找到的文件执行( -exec
)命令( )将其移动到新目录。mv
{}
/destination/directory
请注意,前面的空格\;
是绝对必要的。
答案2
这应该在 Windows 端有效电源外壳:
Get-ChildItem -Path "C:\Source" -Recurse -Include *.* | Move-Item -Destination "C:\Destination\"
答案3
这个答案基于 Python,因此它应该可以在 OSX 和 Windows 上运行,假设你安装了 Python(并且根据记录,这是我的头脑)。
import os
import shutil
path = "C:/dir" # the directory tree you want to "explode"
store= "C:/store" # where all files will be stored
for dirpath, dirnames, filenames in os.walk(path):
name = ""
for c in dirpath:
if c != "/": # if the character is different than the current directory character
name += s
else:
name += "_" # "quick and dirty" way of resolving name conflicts
for files in filenames:
orig_loc = os.path.join(dirpath,files)
copy_loc = os.path.join(store,name + "_" + files)
shutil.copy2(orig_loc,copy_loc)
这应该将所有文件(加上元数据)从path
结构复制到store
文件夹。
如果您不关心名称冲突,请不要使用name = ""
和for files in filenames
语句之间的代码。该代码的作用是转换/
为_
,然后将清除的目录名称添加到文件名称的前面。
这将保留原始结构,之后你可以使用shutil.rmtree(path)