繁体   English   中英

Linux-如何仅压缩包含特定文件的目录?

[英]Linux - how can I tar only directories that contain specific files?

我已经搜索并尝试了几个小时,但似乎无法完全完成最后一步。

我需要做的是搜索所有.xml文件的两层子目录,并且包含.xml文件的任何第一层子目录都是我要压缩的子目录-但是我无法正确使用sed命令,所以我没有甚至没有搞清楚tar命令。 例如,如果我有以下文件

/dir1/subdir1/file.xml
/dir2/subdir2/file.xml
/dir3/file.doc
/dir4/file.xml
/dir5/subdir1/file.doc

我只想结束对dir1,dir2和dir4的处理; .xml文件的深度可能在1或2层之内,而我不希望tar没有.xml文件的目录。

我认为解决方案是find __ |的组合。 sed ____ | tar,但是我无法正确执行sed命令。 到目前为止找到__ | 我拥有的sed ___命令是:

find . -maxdepth 3 -type f -name '.xml' | sed 's/*.xml//'

它会在接下来的2个子目录中查找所有“ .xml”文件,然后在没有“ .xml”扩展名的情况下打印该文件的路径列表。 即使我真正需要的是没有文件,这也是我得到的最接近的文件。

即使只是帮助sed命令也将有所帮助! 谢谢!

您可以使用cut代替sed

find -maxdepth 3 -type f -name "*.xml" | cut -d / -f 2 | sort -u | xargs tar -cf stuff.tar

sort -u是必需的,因此当一个目录包含多个XML文件时,不要sort -u包含一个目录。

我想find会给您适当的列表,并且您不需要sed,仅使用dirname就足够了。

试试类似find . -maxdepth 3 -type f -name '*.xml' | xargs dirname东西find . -maxdepth 3 -type f -name '*.xml' | xargs dirname find . -maxdepth 3 -type f -name '*.xml' | xargs dirname find . -maxdepth 3 -type f -name '*.xml' | xargs dirname并将其再次通过管道传递到tar。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM