我有多个表格
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
我基本上想把所有这些独特的文件收集到一个地方,就像以前一样。
答案 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
等等mv
)。cp -al
具体 UN * X 概念在Un * x下,您可以创建硬链接,它不是符号链接,而是文件夹树中的辅助条目,用于相同的inode。
Nota:由于只需要引用一个inode,因此只能在同一个文件系统上运行。
使用
cp -ialt alpha/beta/gamma/files alpha_*/beta/gamma/files/uniqueFile*
您将在一个目录中复制所有inode引用,但每个引用只保留一个文件。
cd foo/bar/baz
shopt -s globstar
cp -alit alpha/beta/gamma/files alpha_*/**/uniqueFile*