csvファイルに書き込むときにファイル名が分割される

csvファイルに書き込むときにファイル名が分割される

ターミナルフォルダにディレクトリがあります。私はMobaXtermを使用しています。このディレクトリには多くのファイルがあります。ファイル名が非常に長く、いくつかの無効な文字が含まれています。サンプルファイル名は次のとおりです。「2015年以降開発議題に関する事務総長高位級パネル共同議長3人(インドネシア、リベリア、イギリス) - Media Stakeout-1861343067001.m4a」。次のコマンドラインを使用してファイル名をcsvファイルに書き込んでおり、これまでは機能していました。

dir$ find . -type f  > names.csv

ところで今回はファイル名がもはや一つの列ではなく複数の列に分かれています。

ここに画像の説明を入力してください。

A列にフルネームを入力したいです。カンマを含む元のファイル名を書きたいです。同じコマンドで以前のデータセットにコンマを含むファイル名を書き込むことができましたが、唯一の違いは、これらのファイル名がこのファイル名より短いことです。

どうすれば修正できますか?

答え1

Linuxでは、GNU findには-printfファイル名を指定された形式で印刷してCSVにインポートするオプションがあります。たとえば、ファイル名を二重引用符で囲むことができます。

find . -type f -printf '"%p"\n'

答え2

CSVは次のことを意味します。カンマ区切り値。スプレッドシートは、ファイルを読み取るときにカンマをフィールド区切り文字として解釈します。カンマをアンダースコアなどの別の区切り文字に置き換えます。ティーだから、

$ tr ',' '-_' < input.csv | tr -d '"' 

フィールド 1 はインポート時に分割されません。

答え3

CSVにはさまざまな種類がありますが、sedを使用するRFC 4180準拠のソリューションは次のとおりです。

find . -type f | sed 's/"/""/g;s/\(.\+\)/"\1"/'

"これは with インスタンスを置き換え、""空でない行を二重引用符で囲みます。

答え4

ファイル名の長さはここで重要な役割を果たしませんが、インポートエンジンのデフォルトの区切り文字は役割を果たします。ファイル名に一度も使用されていない文字を選択してCVS区切り文字として使用してください。選択項目が§(部分表記法)で、コマンドが次のようになるとしますfind

find . -type f -printf '§%p§\n' > names.csv

または、始点なしでファイル名を取得するには、次のようにします。

find . -type f -printf '§%P§\n' > names.csv

csvをインポートするときに§を区切り記号として指定します。 ここに画像の説明を入力してください。

関連情報