我想tar和所有的.php和.html文件在一个目录和它的子目录。第一个月它会破坏所有的文件,这是我不想要的。如果我使用tar -cf my_archive *.php *.html它忽略了子目录。2我怎样才能使它递归的包含两种类型的文件呢?
tar -cf my_archive *.php *.html
00jrzges1#
第一个月
w8ntj3qf2#
如果您使用的是bash version〉4.0,您可以利用shopt -s globstar来快速完成此操作:
bash
shopt -s globstar
shopt -s globstar; tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json
这将添加来自任何子目录的以Alice开头的所有.yml文件,并添加来自任何子目录的以Bob开头的所有.json文件。
55ooxyrt3#
一种方法是:
tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )
但是,此方法有一些注意事项:1.如果任何文件或目录中包含空格,则此操作将失败,并且1.如果文件太多,最大命令行长度已满,则会失败。解决这些问题的一种方法是将find命令的内容输出到一个文件中,然后对tar使用“-T,--files-from FILE”选项。
tct7dpnv4#
这将处理带有空格的路径:
find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
px9o7tmv5#
如果要生成一个压缩的tar文件(.tgz),并避免文件名中出现空格问题:
.tgz
find . \( -name \*.php -o -name \*.html \) -print0 | xargs -0 tar -cvzf my_archive.tgz
find的-print0“primary”使用NULL(\0)字节分隔输出文件名,因此可以很好地与xargs的-0选项配合使用,xargs选项将其(在本例中为NULL分隔)输入作为参数附加到它前面的命令中。需要在两个-name原色周围加上括号,因为否则-print0将只输出第二个-name的文件名(如果-print或-print0存在,则没有隐含的打印,并且这些只有在它们被求值时才有效)。如果你需要跳过一些文件名或目录(例如,如果你使用Node.js,则为node_modules目录),请预先添加一个或多个-prune主目录,如下所示:
find
-print0
\0
xargs
-0
-name
-print
node_modules
-prune
find . -name skipThisName -prune -o \ -name skipThisOtherName -prune -o \ \( -name \*.php -o -name \*.html \) -print0 | xargs -0 tar -cvzf my_archive.tgz
goucqfw66#
把它们放到一个文件里
find . \( -name "*.php" -o -name "*.html" \) -print > files.txt
然后使用该文件作为tar的输入,根据所使用的tar版本使用-I或-T使用h复制符号链接
tar cfh my.tar -I files.txt
disbfnqx7#
第一个月对于多核或仅对于单核:find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz
1l5u6lss8#
轻松使用zsh:
tar cvzf foo.tar.gz **/*.(php|html)
8条答案
按热度按时间00jrzges1#
第一个月
w8ntj3qf2#
如果您使用的是
bash
version〉4.0,您可以利用shopt -s globstar
来快速完成此操作:这将添加来自任何子目录的以Alice开头的所有.yml文件,并添加来自任何子目录的以Bob开头的所有.json文件。
55ooxyrt3#
一种方法是:
但是,此方法有一些注意事项:
1.如果任何文件或目录中包含空格,则此操作将失败,并且
1.如果文件太多,最大命令行长度已满,则会失败。
解决这些问题的一种方法是将find命令的内容输出到一个文件中,然后对tar使用“-T,--files-from FILE”选项。
tct7dpnv4#
这将处理带有空格的路径:
px9o7tmv5#
如果要生成一个压缩的tar文件(
.tgz
),并避免文件名中出现空格问题:find
的-print0
“primary”使用NULL(\0
)字节分隔输出文件名,因此可以很好地与xargs
的-0
选项配合使用,xargs
选项将其(在本例中为NULL分隔)输入作为参数附加到它前面的命令中。需要在两个
-name
原色周围加上括号,因为否则-print0
将只输出第二个-name
的文件名(如果-print
或-print0
存在,则没有隐含的打印,并且这些只有在它们被求值时才有效)。如果你需要跳过一些文件名或目录(例如,如果你使用Node.js,则为
node_modules
目录),请预先添加一个或多个-prune
主目录,如下所示:goucqfw66#
把它们放到一个文件里
然后使用该文件作为tar的输入,根据所使用的tar版本使用-I或-T
使用h复制符号链接
disbfnqx7#
第一个月
对于多核或仅对于单核:
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz
1l5u6lss8#
轻松使用zsh: