スペースとハイフンを含むファイル名のサイズを探すスペースとハイフンを含むファイル名を「du」に渡す

スペースとハイフンを含むファイル名のサイズを探すスペースとハイフンを含むファイル名を「du」に渡す

一部のファイルの名前を含むファイルがあります。リスト内のファイルの合計サイズを知りたいです。

#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これにより、コマンドの文字列がから読み取られた各名前に置き換えられますxargsfiledu -sch filefilelist

これにより、スペースとシェルのグローブパターンを含むファイル名が正しく処理されます(パターンは拡張されません)。

おすすめ記事