虽然我可以找到文件夹中的所有.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
如何防止此错误。我相信应该有一种方法可以为多个通配符提供其他脚本语言中提供的“OR”运算符。
答案 0 :(得分:3)
tar
不是脚本语言。
要隐藏错误消息,只需将tar的stderr重定向到位桶:
tar ... 2> /dev/null
请注意,您可能会错过其他错误。
安全的方法是首先列出文件,选择要提取的文件,只有在有文件时才这样做。
tar --list -f ...tgz | grep '\.\(pdf\|mobi\|epub\)$'
答案 1 :(得分:1)
感谢@choroba下面的代码是完美的。没有报告错误。将代码作为答案发布,以便其他人可以更好地了解最终的工作代码。
defstruct