Переименование (.filename) файл к настоящим именам

Я пытаюсь вернуться изменение, через которое я внес rename.

Я переименовывал файлы в подпапке, затем без взглядов, которые попробовали для очистки .. от использования имен:

rename "s/.././" *

Теперь у меня есть папка 600 файлов с 2 первыми буквами каждого имени файла, измененного на .zzyGir*

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

Я попробовал разные вещи без удачи, такие как:

rename "s/./Di/; *

Я открыт для one-file-at-a-time решений также, я, прежде всего, стараюсь не терять файлы.

2
задан 8 July 2015 в 20:27

2 ответа

Первые две буквы являются историей. Никакой шанс вернуть их. Но можно переименовать файлы для разделения продвижения . с процедурой ниже

Обязательно имейте bash в терминале

bash

Войдите в свою папку с неправильными именами файлов

shopt -s dotglob
rename -n 's/^\./Di/' *

Если все выглядит хорошо

rename 's/^\./Di/' *

Конец с

shopt -u dotglob

Объяснение

  • rename -n "s/^\./Di/" *

    • -n

      Никакое действие: расшифровка подписи файлов, которые будут переименованы, но не переименовывают.

    • /^\./

      • ^ утверждайте положение в начале строки

      • \. соответствует символу . буквально

  • shopt -s dotglob & shopt -u dotglob

    • shopt

      shopt [-pqsu] [-o] [optname …]
      

      Переключите значения настроек, управляющих дополнительным поведением оболочки.

    • -s

      Включите (устанавливает) каждый optname.

    • -u

      Отключите (сбрасывает) каждый optname.

    • dotglob

      Если установлено, Bash включает имена файлов, начинающиеся a . в результатах расширения имени файла.


Пример

$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 .foo

$ rename "s/^\./Di/" *

$ ls -oag
total 88
drwxrwxr-x   2  4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r--   1     0 Jul 17 17:16 Difoo

Я не уверен, что Вы имеете в виду с этим

Есть ли любой способ изменить "." спину на первые буквы каждого имени файла

Вы имеете в виду что-то вроде этого?

.zzyGir -> zzzzGir

Если да, то используйте, это управляет в ударе:

shopt -s dotglob
rename -n 's/^\.(..)(.*)/$1$1$2/' *

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

rename 's/^\.(..)(.*)/$1$1$2/' *

И наконец снова

shopt -s dotglob
2
ответ дан 2 December 2019 в 03:53

Поскольку я понимаю, что у Вас есть папка с файлами такой как указано ниже:

ls -la

drwxrwxr-x 2 ron ron 4096 Jul 17 20:50 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 .zyz

и Вы хотите удалить . от всех имен файлов для создания его:

abc
Gyr
hig123
zyz

Для этого можно использовать find и rename:

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;

Вышеупомянутая команда (т.е. с -n) пробный прогон:

find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;
rename(./.zyz, zyz)
rename(./.abc, abc)
rename(./.Gyr, Gyr)
rename(./.hig123, hig123)

Выполните его без -n на самом деле изменить имена файлов:

find . ! -path . -type f -name ".*" -exec rename "s/.\/.//" {} \;
ls -la
total 8   
drwxrwxr-x 2 ron ron 4096 Jul 17 20:59 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 abc
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 Gyr
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 hig123
-rw-rw-r-- 1 ron ron    0 Jul 17 20:47 zyz
0
ответ дан 2 December 2019 в 03:53

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

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