存在しないファイルのリストをタール化​​する


10

次のようなスクリプトからコマンドを実行しています

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

ここで、b、c、およびdは存在しない場合があり、ディレクトリである場合があります。私が思いついた解決策は、ls -dto の出力をパイプし、grepそれをtarコマンドにスプライスするか、の拡張グロブをオンにすること@(a|b|c|d)です。

これを行うよりきちんとした方法はありますか?私はDebian Wheezyを使用してい--includeますが、パラメーターがないようです。


--ignore-failed-readオプションはありますか?
Costas

1
試してみましたが、まったく存在しないファイルに対してエラーが発生しました。
gidyn 2014年

1
はい、エラーメッセージは表示されますが、アーカイブは作成されます。
Costas 2014年

回答:


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

スクリプトをダッシュ​​に移植しているので、いいえextglob-上記のコメントでコードを使用しています
gidyn

1

tarアーカイブ内のファイルの完全パスを指定しても問題ない場合は、次のようにできます。

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

-ereadlink のオプションは、既存のファイル名を正規化し、他のファイル名を黙って無視します。


--strip-components抽出しているときにうまくいくと思います。
gidyn 2014年

0

使用する

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

説明

  1. 最初のパラメータは、検索するディレクトリです。
  2. デフォルトでfindは再帰を行います。
  3. -o略です-or。したがって、上記はこのワイルドカードまたはこのワイルドカードを検索することを意味します。パターンが1つしかない場合は、は必要ありません-o
  4. ワイルドカードパターンを囲む引用符は必須です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.