2

一連の tarball を含む LTO テープがあり、それぞれに約 300 個の tiff ファイルが含まれています。tarball の内容は事前にわかりません。

各 tarball から最初のファイルを抽出し、そのチェックサムを自分のコンピューターに存在する同じファイルと比較する必要があります。

現時点では、各tarballに駐車した後、実行しています...

tar -b 1024 -tvf /dev/nst0

... 内容を一覧表示し、最初のファイル名を取得します。しかし、私は -tvf が終了するのを待っている時間を無駄にしています。

最初のファイルの名前だけを取得する方法はありますか?

4

2 に答える 2

2
firstfile="$(tar -b 1024 -tvf /dev/nst0 | while read item ; do [[ "$item" =~ ^- ]] && echo "$item" && break ; done )"

「tar -tvf」はディレクトリで始まる可能性があるため、「head -n 1」では不十分です。

于 2014-10-16T15:12:36.657 に答える
0

tars の man ページは非常に長いので、それを読んでいて、問題に一致する tar オプションがないことを前提としています。私はうまくいく2つのアイデアを持っていますが、あまりエレガントなハッキングではありません:

1) tar -tvf をバックグラウンドで開始し、PID を保存し、出力が少なくとも 1 行になるまでチェックして、tar プロセスを強制終了します。

2) これは非常に短いですが、汚い解決策のようなものです: tarball は連結できるので、出力の代わりに tarball 自体を head にすることもできます。切り捨てられた tarball の tar -tv は、バイナリの最初の行にあるファイルの名前と、エラー/中止の警告を示します。確実に 1 つのファイル名だけを取得するには、出力の別のヘッド -n1 を追加できます。

head /dev/nst0 | tar -tv 2> /dev/null
于 2014-10-17T11:41:57.687 に答える