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

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

ターミナルフォルダにディレクトリがあります。MobaXtermを使用しています。このディレクトリには多数のファイルがあります。ファイル名は長く、一部不正な文字が含まれています。ファイル名の例は次のとおりです。「2015年以降の開発アジェンダに関する事務総長のハイレベルパネルの3人の共同議長(インドネシア、リベリア、英国) - Media Stakeout-1861343067001.m4a」次のコマンド ラインを使用して csv ファイルにファイル名を書き込みましたが、これまでのところは機能していました。

dir$ find . -type f  > names.csv

ただし今回は、ファイル名が 1 つの列ではなく、複数の列に分割されます。

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

列 A には名前全体だけを表示したいです。カンマを含む元のファイル名を書きたいです。同じコマンドで以前のデータセットのカンマ付きファイル名を書き込むことができましたが、唯一の違いはそれらのファイル名がこのファイル名よりも短いことです。

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

答え1

Linux では、GNU find に、-printf指定された形式でファイル名を出力するオプションがあります。CSV にインポートするには、次のようにファイル名を二重引用符で囲みます。

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

答え2

CSVとはカンマ区切り値スプレッドシートがファイルを読み込む際、カンマはフィールド区切りとして解釈されます。カンマをアンダースコアなどの他の区切り文字に置き換えてください。tr、このように

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

インポートすると、フィールド 1 は分割されません。

答え3

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

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

これにより、 のインスタンスが"に置き換えられ""、空でない行が二重引用符で囲まれます。

答え4

ファイル名の長さはここでは影響しませんが、インポート エンジンのデフォルトの区切り文字は影響します。ファイル名で使用されていない文字を選択し、それを CVS 区切り文字として使用します。この選択が § (セクション記号) であると仮定しますfind。コマンドは次のようになります。

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

または、開始点なしでファイル名を取得する場合:

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

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

関連情報