Tar列出不完全存在的文件列表


10

我正在从类似的脚本中运行命令

tar -c -f ar.tar a b c d

其中b,c和d可能不存在,并且可能是目录。我想出的解决方案是将输出ls -d传递到grep,然后将其拼接到tar命令中,或者打开的扩展glob @(a|b|c|d)

有更整齐的方法吗?我正在使用Debian Wheezy,它似乎没有--include参数。


你有--ignore-failed-read选择吗?
Costas 2014年

1
尝试过,对于根本不存在的文件仍然给出了错误。
gidyn 2014年

1
是的,存在错误消息,但已创建存档。
Costas 2014年

Answers:


8

你可以试试

 tar cf ar.tar $(ls a b c d )

哪里

  • c 用于创建
  • f ar.tar 指定tar文件

  • $(ls a b c d) 将列出到stdin哪个文件确实存在(并为其他文件提供错误)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)工作完美..但我认为使用extglob会更干净
gidyn 2014年

现在我要将脚本移植到破折号,所以不extglob-我在上面的注释中使用了代码
gidyn 2015年

1

如果可以在tar存档中拥有文件的完整路径,则可以执行以下操作:

tar -c -f ar.tar $(readlink -e a b c d)

-e选项的readlink将规范化现有的文件名和默默忽略其他。


我想如果我--strip-components在提取时可能会起作用。
gidyn 2014年

0

采用

find path/to/dir -name "*.ext1" -o -name "*.ext2"

说明

  1. 第一个参数是您要搜索的目录。
  2. 默认情况下find会递归。
  3. -o代表-or。因此,以上表示搜索此通配符或此通配符。如果只有一种模式,则不需要-o
  4. 通配符模式周围的引号是必需的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.