Имя файла разделяется при записи в 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 означаетЗначение, разделенное запятыми. Когда электронная таблица считывает файл, она интерпретирует запятые как разделители полей. Замените запятые на какой-либо другой разделитель, например, на подчеркивание, стр, таким образом

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

При импорте поле 1 не будет разделено.

решение3

Существуют различные разновидности CSV, но решение, совместимое с RFC 4180, с использованием sed:

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-файла укажите § в качестве разделителя. введите описание изображения здесь

Связанный контент