すべてのファイルのリスト(サイズを含む)をテキストファイルとして保存しようとしています。
このコマンドを使用すると、ファイルfind *> yourfilename.csv
名のみをエクスポートできます。
ファイルサイズをどのように追加しますか?
答え1
bash
Linux(または互換性のある実装を含むシステム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
bash
OpenBSD(または同様の実装を持つ他の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
。
ls -l > output
output
- これにより、以下のようにファイル内にディレクトリリスト(サイズを含む)が保存されます。
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ファイルとして出力するので、それを希望の区切り文字に置き換えることもできます。)