在 csv 檔案上寫入時檔案名稱被分割

在 csv 檔案上寫入時檔案名稱被分割

我在終端資料夾中有一個目錄。我正在使用 MobaXterm。該目錄中有大量文件。檔案名稱很長並且包含一些非法字元。範例檔案名稱是“秘書長 2015 年後發展議程高級別小組的三位聯合主席(印度尼西亞、利比里亞、英國) - 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 表示逗號分隔值。當電子表格讀取檔案時,它將逗號解釋為欄位分隔符號。將逗號替換為其他分隔符,例如底線,t,因此

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

當你導入它們時,字段一不會被分割。

答案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 時指定 § 作為分隔符 在此輸入影像描述

相關內容