一部のファイルの名前を含むファイルがあります。リスト内のファイルの合計サイズを知りたいです。
#cat filelist
/tmp-directory/connector_db_ connector_db
/tmp-directory/connector_db -connector_db
/tmp-directory/connector_db_connector_db
ご覧のとおり、ファイル名にはスペースが含まれています。もっと悪いのはハイフン(-)です。。次のコマンドを使用して、このファイルの合計サイズを見つけようとします。
#du -sch `cat filelist`
du: invalid option -- 'o'
du: invalid option -- 'n'
du: invalid option -- 'n'
du: invalid option -- 'e'
du: invalid option -- 't'
du: invalid option -- 'o'
du: invalid option -- 'r'
du: invalid option -- '_'
du: invalid maximum depth `b'
以下のように「」を追加しようとしましたが、試みも失敗しました。
#cat filelist
"/tmp-directory/connector_db_ connector_db"
"/tmp-directory/connector_db -connector_db"
"/tmp-directory/connector_db_connector_db"
#du -sch `cat filelist`
du: invalid option -- 'o'
du: invalid option -- 'n'
.....
しかし、これは効果があります。シェルから直接次のコマンドを使用する場合。
#du -sch "/tmp-directory/connector_db -connector_db"
0 /tmp-directory/connector_db -connector_db
0 total
それでは、このような状況に対処する方法は何ですか?私は持っていますファイル一覧合計3つのlacファイルがあります。悪いことに、「du -sch」はファイルリストが20,000個を超えるとリストを処理しません。私は分割コマンドを使ってリストを20000行に分割しました。3つのlacファイルサイズを簡単に見つけるための別の方法はありますか?
ベストアンサー1
xargs -Ifile du -sch file <filelist
上記の呼び出しコードは、ファイル名に改行文字が含まれていない限りdu -sch
呼び出されますfilelist
。 -Ifile
これにより、コマンドの文字列がから読み取られた各名前に置き換えられますxargs
。file
du -sch file
filelist
これにより、スペースとシェルのグローブパターンを含むファイル名が正しく処理されます(パターンは拡張されません)。