合并目录树的最快方法

时间:2016-11-15 22:17:29

标签: python linux

我有多个表格

foo/bar/baz/alpha_1/beta/gamma/files/uniqueFile1
foo/bar/baz/alpha_2/beta/gamma/files/uniqueFile2
foo/bar/baz/alpha_3/beta/gamma/files/uniqueFile3

将这些目录合并到单个目录结构(如

)的最快方法是什么
foo/bar/baz/alpha/beta/gamma/files/uniqueFile1...uniqueFile3

我可以写一个python脚本来做到这一点但是有更快的方法在debian机器上做到这一点吗?在这种情况下,rsync可以提供帮助吗?

编辑:

对于之前没有说清楚的道歉,示例中的深度是~10-12,我不知道某些目录名称,例如alpha *,这些是在丢弃日志时随机生成的。我正在使用带有通配符的查找来更早地列出这些文件,但现在路径中添加了另一个级别,导致我的查询查询从0.004秒开始花费一分钟。所以我正在寻找更快的解决方案。

/known_fixed_path_5_levels/*/known_name*/*/fixed_path_2_levels/n_unique_files

已成为

/known_fixed_path_5_levels/*/known_name*/*/xx*/fixed_path_2_levels/unique_file_1
/known_fixed_path_5_levels/*/known_name*/*/xx*/fixed_path_2_levels/unique_file_2
.
.
/known_fixed_path_5_levels/*/known_name*/*/xx*/fixed_path_2_levels/unique_file_n

我基本上想把所有这些独特的文件收集到一个地方,就像以前一样。

2 个答案:

答案 0 :(得分:2)

使用find

mkdir --parents foo/bar/baz/alpha/beta/gamma/files; #create target directory if nessessary
find foo/bar/baz/alpha_[1-3]/beta/gamma/files -type f -exec cp {} foo/bar/baz/alpha/beta/gamma/files \;

答案 1 :(得分:1)

由于问题不明确复制移动,有两种方法,没有复制!即便是第二部分也无法有效复制您的数据!

简单命令

简单地:

cd foo/bar/baz
mv -it alpha/beta/gamma/files alpha_*/beta/gamma/files/uniqueFile*

-i切换以防止覆盖。

这适用于少量文件。

更强大和自适应语法

或者使用find:

cd foo/bar/baz
find alpha_* -type f -mindepth 3 -exec mv -it alpha/beta/gamma/files {} +

使用find的好处是

  • 您可以添加许多标记,例如-name-mtime等等
  • find永远不会尝试将更多文件传递给命令行可以保存的命令(mv)。

cp -al具体 UN * X 概念

在Un * x下,您可以创建硬链接,它不是符号链接,而是文件夹树中的辅助条目,用于相同的inode。

Nota:由于只需要引用一个inode,因此只能在同一个文件系统上运行。

使用

cp -ialt alpha/beta/gamma/files alpha_*/beta/gamma/files/uniqueFile*

您将在一个目录中复制所有inode引用,但每个引用只保留一个文件。

使用&#39> globstar 功能:

cd foo/bar/baz
shopt -s globstar
cp -alit alpha/beta/gamma/files alpha_*/**/uniqueFile*