ディレクトリのファイル名を含むCSVファイルを受け取りますか?

ディレクトリのファイル名を含むCSVファイルを受け取りますか?

Excelで編集可能なCSVファイルとして保存するためにディレクトリのファイル名をエクスポートする方法を学びたいと思います。ディレクトリは次のとおりです。

$ ls
Sample_38_41_1_A01  Sample_38_41_1_A11  Sample_38_41_1_B09
Sample_38_41_1_C07  Sample_38_41_1_D05  Sample_38_41_1_E03
Sample_38_41_1_F01

CSVファイルの各行には、そのディレクトリにあるファイル名が含まれていることを望みます。 Excelでは、次のように表示されます。

A            B    C
1 Sample_38_41_1_A01
2 Sample_38_41_1_A11
3 Sample_38_41_1_B09 
4 Sample_38_41_1_C07 
5 Sample_38_41_1_D05
6 Sample_38_41_1_E03
7 Sample_38_41_1_F01
8 ...

答え1

サンプルファイル名には二重引用符やカンマが含まれていないため、回避策は非常に簡単です。

$ 'ls' > files.csv

ここにはいくつかの微妙さがあります。

  1. lsエイリアスが出力に影響を与えるフラグを追加する場合は、コマンドを引用する必要があります。たとえば、-Fファイルタイプシンボルを追加したり、-C複数列の出力を強制したりします。このクラス名は、最新のUnixおよびUnixファミリーシステムで非常に一般的です。

  2. 端末の代わりにパイプに書き込む場合、ls質問に表示される複数列出力の代わりに1行に1つのファイル名が印刷されます。 POSIXこの場合、単一の熱出力が必要です。、GNU、BSDにls準拠しています。

このCSVファイルにはヘッダー行はありませんが、ExcelですべてのCSVリーダーがそれを処理できるわけではありません。

しかし、もしあればどうでしょうか?はい特殊文字?

二重引用符とカンマはCSVファイルの特殊文字なので、これらの文字で名前が付けられたファイルを含むディレクトリで上記のコマンドを試してみると、有効なCSVファイルを取得できません。

このような状況に対処することはそれほど難しくありません。

まず、カンマのみを含めることができるファイルの例を見てみましょう。 Unixコマンドシェルでは二重引用符が意味を持つため、ファイル名に二重引用符を使用することが強く抑制されるため、これはより一般的なケースです。

$ 'ls' | sed -e 's/^/"/' -e 's/$/"/' > files.csv

これらのsed文字列置換コマンドは、各行の先頭と末尾に二重引用符を配置して、CSVリーダーがカン​​マをフィールド区切り文字として扱うのを防ぎます。

同じ目的を達成する別の方法は次のとおりです。perl -ne 'chomp ; print "\"$_\"\n"'

ファイル名に二重引用符が含まれると、sedソリューションは自然に拡張されます。

$ 'ls' | sed -e 's/"/\\"/g' -e 's/^/"/' -e 's/$/"/' > files.csv

つまり、行を意味論的引用符で囲む前に、既存の二重引用符文字をすべてエスケープします。

一部のCSVリーダーは、二重引用符エスケープを異なる方法で処理し、1行の2つの二重引用符文字をリテラル二重引用符として扱います。

$ 'ls' | sed -e 's/"/""/g' -e 's/^/"/' -e 's/$/"/' > files.csv

答え2

find * > yourfilename.csvはるかに簡単です。

答え3

これ:

find ~/Music -maxdepth 3 -type f -iname "*.mp3" -printf "%h,%f,%CY-%Cm-%Cd %CT,%s,%u,%M\n" > mymusic.csv

関連情報