各ファイルのサイズとともにテキストファイルのリストに保存されます。

各ファイルのサイズとともにテキストファイルのリストに保存されます。

すべてのファイルのリスト(サイズを含む)をテキストファイルとして保存しようとしています。

このコマンドを使用すると、ファイルfind *> yourfilename.csv名のみをエクスポートできます。

ファイルサイズをどのように追加しますか?

答え1

bashLinux(または互換性のある実装を含むシステムstat)でシェルを使用する:

shopt -s globstar dotglob nullglob

for pathname in ./**/*; do
    if [[ -f $pathname ]] && [[ ! -h $pathname ]]; then
        stat -c $'%s\t%n' "$pathname"
    fi
done >outfile.csv

bashOpenBSD(または同様の実装を持つ他のBSDシステムstat)の場合は、次を使用します。

shopt -s globstar dotglob nullglob

for pathname in ./**/*; do
    if [[ -f $pathname ]] && [[ ! -h $pathname ]]; then
        stat -f '%z%t%N' "$pathname"
    fi
done >outfile.csv

どちらも現在のディレクトリ内または下のすべての名前を繰り返します。各一般ファイルに対してstatファイルサイズをバイト単位で呼び出して表示し、タブの間にファイルパス名を印刷します。


シェルのみzshを使用:

zmodload -F zsh/stat b:zstat
zstat -n +size ./**/*(D.)

これにより、組み込みzstatコマンドをシェルで使用でき、現在のディレクトリ内または下にあるすべての一般ファイル(隠し名前を含むファイルを含む)のパス名と見かけのファイルサイズ(バイト)を取得できます。

少数の小さなファイルのみを含む浅いディレクトリの場合、出力は次のようになります。

./file1 136
./file2 136
./somedir/file3 136

...だからCSVとは全く違います。

これは簡単なループでも行うことができ、より正確にフォーマットすることができます。

zstat -L -A data -n +size ./**/*(D.)
for name size in $data; do
    printf '%s\t%s\n' $size $name
done >outfile.csv

これは、現在ディレクトリ内またはその下にあるすべての一般ファイルを呼び出し、zstat結果を配列に保存してから、その配列dataのエントリ(パス名とファイルサイズが交互に変更されます)を繰り返します。パス名とサイズのペアごとにサイズ(バイト単位)を最初に印刷し、次にタブとパス名を印刷します。ここで、出力はoutfile.csv現在のディレクトリに配置されます。

ループを削除しますが、より曖昧なコードで支払う短縮バージョンです(printfフォーマット文字列に慣れていない場合)。

zstat -L -A data -n +size ./**/*(D.)
printf '%2$s\t%1$s\n' $data >outfile.csv

形式printf%2$s\t%1$s\n、2つのパラメータを文字列として出力する必要がありますが、dataそれらの間にタブ文字を使用して反対の順序(配列はパス名とファイルサイズのペアをその順序で格納する)として出力する必要があることを指定します。data配列がすべて消費されるまで、パス名とファイルサイズのペアごとにフォーマットが繰り返されます。


上記のバリエーションのどれも、タブまたは改行文字を含むCSV参照パス名を考慮しません。

答え2

CSVファイルをカンマで区切って、すべてのファイル名に二重引用符、カンマ、または改行文字を含めないようにするには、GNU実装を使用して次のことをfind試してください。

find -printf "%p,%s\n" >filename.csv

答え3

これは以下を使用して行うことができますls

  1. ls -l > outputoutput- これにより、以下のようにファイル内にディレクトリリスト(サイズを含む)が保存されます。
total 4
-rw-r--r-- 1 ashleyprimo ashleyprimo 124 Jan  4 20:01 test1
-rw-r--r-- 1 ashleyprimo ashleyprimo   0 Jan  4 19:56 test2
-rw-r--r-- 1 ashleyprimo ashleyprimo   0 Jan  4 19:56 test3
-rw-r--r-- 1 ashleyprimo ashleyprimo   0 Jan  4 19:56 test5

-a埋め込み隠しファイル(たとえば、.の前にあるファイル)を追加し、-hサイズ出力を「人が読めるように」作成できます。 (例:上記のバイトではなくMB、GBなどで表されます)

現在のディレクトリにあるファイルの単純なサイズ出力が必要な場合は、次のものを使用できます。ls -lh | grep -vE "total|\." | awk {'print $5 " " $9'} > output次のように出力されます。

124 test1
0 test2
0 test3
0 test5

答え4

-ls検索オプションを使用できます。

find /dir -ls >filename.csv

ただし、これによりファイル名とサイズよりも多くの情報が印刷されます。

または、以下findを組み合わせて使用​​できますstat

find /dir -exec printf '%s,' {} \; -exec stat -f %z {} \; >filename.csv

これにより、ファイル名とサイズがカンマで区切られ、バイト単位で印刷されます。 (csvファイルとして出力するので、それを希望の区切り文字に置き換えることもできます。)

関連情報