我正在从类似的脚本运行命令
tar -c -f ar.tar a b c d
其中b、c和d可能不存在,并且可能是目录。我提出的解决方案是将ls -d
to的输出通过管道传输grep
,然后将其拼接到tar
命令中,或者打开 的扩展 glob @(a|b|c|d)
。
有没有更简洁的方法来做到这一点?我使用的是 Debian Wheezy,它似乎没有参数--include
。
答案1
你可以试试
tar cf ar.tar $(ls a b c d )
在哪里
c
用于创建f ar.tar
指定 tar 文件$(ls a b c d)
将向标准输入列出真正存在的文件(并对其他文件给出错误)
答案2
如果可以在 tar 存档中获得文件的完整路径,您可以执行以下操作:
tar -c -f ar.tar $(readlink -e a b c d)
-e
readlink 选项将规范化现有文件名并默默地忽略任何其他文件名。
答案3
使用
find path/to/dir -name "*.ext1" -o -name "*.ext2"
解释
- 第一个参数是要搜索的目录。
- 默认情况下
find
进行递归。 - 代表.
-o
-or
所以上面的意思是搜索这个通配符或这个。如果您只有一种模式,则不需要-o
. - 通配符模式周围的引号是必需的。