虽然我可以找到一个文件夹中的所有 .tgz 文件,然后仅从中提取 PDF、EPUB 和 MOBI 文件(如果它存在于存档中)。
find '/home/pi/Downloads/complete/' -type f -name "*.tgz"| while read i ; do tar -xvzf "$i" -C /home/pi/Downloads/complete/ebook/ --strip=1 --wildcards --no-anchored '*.pdf' '*.mobi' '*.epub'; done
当存档中存在 pdf、mobi 或 epub 时,这行代码可以完美运行。但是,使用此代码,每当给定存档中没有 pdf/epub/mobi 时,它都会返回错误,如下所示。
tar: *.pdf: Not found in archive
tar: *.mobi: Not found in archive
tar: Exiting with failure status due to previous errors
如何防止这个错误。我相信应该有一种方法可以为多个通配符提供一个“或”运算符,就像在其他脚本语言中一样。
最佳答案
tar
不是脚本语言。
要隐藏错误消息,只需将 tar 的 stderr 重定向到一个位桶:
tar ... 2> /dev/null
请注意,您可能会错过其他错误。
安全的方法是先列出文件,选择要提取的文件,只有在有文件时才这样做。
tar --list -f ...tgz | grep '\.\(pdf\|mobi\|epub\)$'
关于linux - 如何在使用 tar 提取文件时使用带通配符的 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316778/