当进行tar提取操作时,有时内容会直接提取到父文件夹,因为它们会变得混乱。例如:
tar -xzf foo1.tar.gz
提取物:
./file1
./file2
./file3
解决方法是为tar.gz创建一个特定的文件夹。例如:
tar -C foo -xzf foo1.tar.gz
提取物:
./foo1/file1
./foo1/file2
./foo1/file3
所以,如果我有很多.tar.gz要提取,我会这样做:
find -name \*.tar.gz | xargs -n 1 basename -s .tar.gz | xargs -I {} tar -C {} -xzf {}.tar.gz
要安全地提取它们,但我会最终得到这样的东西:
./foo3/foo3/file1
./foo3/foo3/file2
./foo3/foo3/file3
对于那些需要它的情况,是否有一种自动方法可以使用bash删除重复的子文件夹?
答案 0 :(得分:0)
计算目录中的条目数(提示:dotglob
,(*)
和${#var[@]}
),如果单个目录条目具有相同的名称,则复制属性并移动内容(请注意,您可能在该目录中有某些内容也具有相同的名称),然后删除now-empty目录。
答案 1 :(得分:0)
这是一种可能的解决方案
将文件从子目录移动到顶层目录:
find ! -name . -maxdepth 1 -type d | xargs -I {} sh -c "find {}/{} -maxdepth 1 | xargs -I [] echo \"mv [] {}\""
这是有效的,因为如果子文件夹不存在,则find将不执行任何操作:
find foo4/foo4
find: 'foo4/foo4': No such file or directory
删除已恢复的子目录
find ! -name . -maxdepth 1 -type d | xargs -I {} find {}/{} -type d -maxdepth 1 | xargs rmdir
我认为它确实符合它的目的。缺点:
它显示了许多无害的错误。