Linux - 我怎样才能 tar 只包含特定文件的目录?
Linux - how can I tar only directories that contain specific files?
我已经搜索并尝试了几个小时,但似乎无法完成最后一步。
我需要做的是搜索所有.xml文件的两层子目录,任何包含.xml文件的第一层子目录都是我想要的子目录tar - 但是我无法正确使用 sed 命令,所以我什至没有继续弄清楚 tar 命令。
例如,如果我有以下文件
/dir1/subdir1/file.xml
/dir2/subdir2/file.xml
/dir3/file.doc
/dir4/file.xml
/dir5/subdir1/file.doc
我只想结束 tarring dir1, dir2, and 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 命令也会有所帮助!谢谢!
我想 find 会给你正确的列表,你不需要 sed,只需使用 dirname 就足够了。
尝试 find . -maxdepth 3 -type f -name '*.xml' | xargs dirname
之类的内容,然后再次通过管道将其传输到 tar。
您可以使用 cut
:
而不是 sed
find -maxdepth 3 -type f -name "*.xml" | cut -d / -f 2 | sort -u | xargs tar -cf stuff.tar
需要 sort -u
,这样当一个目录包含多个 XML 文件时,您不会多次包含该目录。
我已经搜索并尝试了几个小时,但似乎无法完成最后一步。
我需要做的是搜索所有.xml文件的两层子目录,任何包含.xml文件的第一层子目录都是我想要的子目录tar - 但是我无法正确使用 sed 命令,所以我什至没有继续弄清楚 tar 命令。 例如,如果我有以下文件
/dir1/subdir1/file.xml
/dir2/subdir2/file.xml
/dir3/file.doc
/dir4/file.xml
/dir5/subdir1/file.doc
我只想结束 tarring dir1, dir2, and 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 命令也会有所帮助!谢谢!
我想 find 会给你正确的列表,你不需要 sed,只需使用 dirname 就足够了。
尝试 find . -maxdepth 3 -type f -name '*.xml' | xargs dirname
之类的内容,然后再次通过管道将其传输到 tar。
您可以使用 cut
:
sed
find -maxdepth 3 -type f -name "*.xml" | cut -d / -f 2 | sort -u | xargs tar -cf stuff.tar
需要 sort -u
,这样当一个目录包含多个 XML 文件时,您不会多次包含该目录。