Я пытаюсь вернуться изменение, через которое я внес rename
.
Я переименовывал файлы в подпапке, затем без взглядов, которые попробовали для очистки ..
от использования имен:
rename "s/.././" *
Теперь у меня есть папка 600 файлов с 2 первыми буквами каждого имени файла, измененного на .zzyGir*
Там какой-либо путь состоит в том, чтобы изменить "." спину на первые буквы каждого имени файла, не теряя целый файл?
Я попробовал разные вещи без удачи, такие как:
rename "s/./Di/; *
Я открыт для one-file-at-a-time решений также, я, прежде всего, стараюсь не терять файлы.
Первые две буквы являются историей. Никакой шанс вернуть их. Но можно переименовать файлы для разделения продвижения .
с процедурой ниже
Обязательно имейте 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
Поскольку я понимаю, что у Вас есть папка с файлами такой как указано ниже:
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