удалить определенные специальные символы из имен файлов

У меня проблема с переносом папок на внешний жесткий диск - я не хочу менять форматирование на HD.

Итак, в папке сотни файлов, и ошибка, не позволяющая мне их скопировать, исходит из-за специальных символов (я не знаю, какие именно, но я считаю, что это "|" и ".", И я уверен, что есть и другие . Я вручную переименовывал / удалял их, но это больно.

Открыт для предложений, но я «предполагаю», что я ищу способ удалить эти конкретные символы из имени файла (это могло бы вызвать проблема с .m4a и т. д.?), или замените их подчеркиванием, если необходимо. Единственное, что у меня есть, это переименование perl, но я еще не пробовал.

переименовать 'y / | / _ /' * {{1} } как это?

спасибо за любые предложения

0
задан 29 April 2021 в 16:00

2 ответа

Если вы попробуете приложение "диски", вы увидите, что есть еще как минимум один раздел. Вы ищете именно этот раздел, а не раздел EFI, который содержит только загрузочные файлы. Вы можете смонтировать нужный раздел, нажав кнопку "play" в приложении "disks".

EDIT:

Поскольку это раздел LVM2, вам следует выполнить следующие шаги:

Установить LVM2

$ sudo apt install lvm2

Просканировать раздел LVM2

запустить

$ sudo vgscan

или

$ sudo vgscan --mknodes

в результатах указывается группа LVM.

Для ее активации выполните

$ sudo vgchange -ay

или

$ sudo vgchange -ay "LVM_Group_Name"

где "LVM_Group_Name" обозначает группу LVM, указанную в предыдущем шаге (пишите ее без кавычек)

Для ее перечисления выполните следующую команду

$ sudo lvdisplay 

или

$ sudo lvs

Смонтируйте раздел LVM2

Создайте точку монтирования

$ sudo mkdir -vp /mnt/My_Lovely_Partition_Name/{root,home}

(вместо точку

$ sudo mkdir -vp /mnt/My_Lovely_Partition_Name/{root,home}

(вместо My_Lovely_Partition_Name вы можете использовать любое имя, какое захотите)

Смонтируйте домашний и корневой тома из LV пути

$ sudo mount {LV_PATH} /path/to/mount/point/
$ sudo mount /dev/LVM_Group_Name/home /mnt/My_Lovely_Partition_Name/home
$ sudo mount /dev/LVM_Group_Name/root /mnt/My_Lovely_Partition_Name/root

Проверьте его

$ df -T
$ df -T | grep -i fedora
$ ls /mnt/My_Lovely_Partition_Name/root
$ ls /mnt/My_Lovely_Partition_Name/home

Обновите файл /etc/fstab, если хотите, чтобы он монтировался автоматически при загрузке

/dev/mapper/LVM_Group_Name-root /mnt/My_Lovely_Partition_Name/root ext4 defaults 0 0
/dev/mapper/LVM_Group_Name-home /mnt/My_Lovely_Partition_Name/home ext4 defaults 0 0

Все кредиты получает Vivek Gite

-... 121---915185-

Вы должны:

  1. запустить sudo dpkg-reconfigure locales
  2. указать минимальный набор необходимых локалей (выбор по пробелу)
  3. подтвердить перестройку локалей (по Tab и Enter на "кнопке" CLI)
-... 121---915207-

Да (основанная на Perl) команда rename является хорошим кандидатом для этого. Вы можете добавить опцию -n или --nono для пробного запуска замены, например:

   -n, --nono
           No action: print names of files to be renamed, but don't rename.

так, например

$ rename -n 'y/|./__/' *\|*
rename(foo|bar.baz, foo_bar_baz)
rename(foo|bar|baz, foo_bar_baz)

Обратите внимание, что rename не позволит вам деструктивно перезаписать файлы, если их имена не уникальны:

$ rename -v 'y/|./__/' *\|*
foo|bar.baz renamed as foo_bar_baz
foo|bar|baz not renamed: foo_bar_baz already exists

Обратите внимание, что . является не специальным символом в контексте имен файлов, поэтому я бы предложил не заменять его.

0
ответ дан 7 May 2021 в 17:42

В целом mmv отлично справляется с задачами массового переименования.

Но в этом конкретном случае я бы пошел совершенно другим путем: сгенерировал сценарий оболочки с парой команд оболочки, внимательно посмотрел на него, если это действительно то, что я хочу, и затем выполнил его.

Примерный план:

ls -Q >/tmp/old.txt
cp /tmp/old.txt /tmp/new.txt

ls -Q добавит двойные кавычки вокруг каждого имени, то есть даст вам «foo * bar» или «foo | bar» ].

Затем замените ненужные символы в /tmp/new.txt либо вручную с помощью редактора, либо с помощью sed -i -e (или perl -p -i - e , если хотите) или tr или tr -d . Важно: не изменяйте порядок в этом файле, а также не удаляйте и не добавляйте какие-либо строки!

В любом случае, внимательно посмотрите /tmp/new.txt , чтобы увидеть, действительно ли это то, что вы хотите, чтобы новые имена выглядели.

Проверьте повторяющиеся имена! ( sort /tmp/new.txt | uniq -r ) Убедитесь, что нет дубликатов, и если они есть, отредактируйте эту строку вручную, чтобы получить уникальное имя.

Затем соедините файлы с помощью команды paste и измените каждую строку на команду mv :

paste /tmp/old.txt /tmp/new.txt | sed -e 's/^/mv -n /' >/tmp/bulk-rename

То, что делает эта команда paste , требует одна строка из /tmp/old.txt и одна строка из /tmp/new.txt и объединяет их в одну строку с пробелом между ними. Часть sed добавляет mv -n в начало каждой из этих строк. mv -n предотвращает перезапись существующего файла.

Этот файл теперь содержит много строк вроде

mv -n "foo" "bar"
mv -n "abc" "def"

. Посмотрите на файл еще раз, и когда вы уверены, что это то, что вам нужно, выполните его с помощью sh / tmp / bulk-rename .

0
ответ дан 7 May 2021 в 17:42

Другие вопросы по тегам:

Похожие вопросы: