Переименовать возвращает & ldquo; bareword not allowed & rdquo; при попытке ввода нижних регистров нескольких имен файлов

Мне нравится расширение оболочки Workspaces to Dock GNOME.

Перетащите указатель мыши в правую сторону экрана. Док будет скользить. На доке вы можете увидеть, какие приложения запущены и где. Чтобы переместить окно в другое рабочее пространство, просто перетащите нужное окно из одного рабочего пространства в другое.

Найдите его на странице https://extensions.gnome.org/extension/427/workspaces-to-dock/

8
задан 17 March 2018 в 12:31

6 ответов

Эта ошибка выглядит так: Perl rename. Вам нужно использовать кавычки, но вам нужно только указать часть, которую вы хотите изменить, стиль поиска и замены. Синтаксис выглядит так:

rename -n 's/\.DAT/\.dat/' *

Удалите -n после тестирования, чтобы фактически переименовать файлы.

Чтобы включить скрытые файлы, измените настройку glob перед запуском команды: 2]

shopt -s dotglob

Если вы хотите переименовать файлы рекурсивно, вы можете использовать

shopt -s globstar
rename -n 's/\.DAT/\.dat/' **

или если в текущей директории или ниже текущей директории, которая не заканчивается .DAT, существует много путей, вам лучше указать эти пути во второй команде:

rename -n 's/\.DAT/\.dat/' **/*.DAT

Это будет быстрее, если ваши файлы имеют разные имена, не заканчивающиеся на .DAT. [1]

To выключите эти настройки, вы можете использовать shopt -u, например shopt -u globstar, но они отключены по умолчанию и будут отключены при открытии новой оболочки.

Если это приводит к чрезмерно длинному списку аргументов, вы можете использовать, например, find:

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} \;

или лучше

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} +

Использование find ... -exec с + выполняется быстрее, чем при использовании \;, потому что это создает список аргументов из найденных файлов. Первоначально я думал, что вам не удастся использовать его, потому что вы упомянули, что у вас проблема с argument list too long, но теперь я знаю, что этот список также будет умно разбит на несколько вызовов команды по мере необходимости избегайте этой проблемы [1] .

Поскольку rename будет обрабатывать каждое имя файла таким же образом, не имеет значения, как долго список аргументов, так как он может быть безопасно разделен через несколько вызовов. Если команда, которую вы используете с -exec, не принимает несколько аргументов или требует, чтобы ее аргументы находились в определенном порядке или по какой-либо другой причине разделение списка аргументов вызовет что-то нежелательное, вы можете использовать \;, что вызывает команда, которая будет вызываться один раз для каждого найденного файла (если список аргументов слишком длинный для других методов, это займет много времени!).

Большое спасибо Элиа Кагану за очень полезные предложения по улучшению этого ответа:

[1] Указание имен файлов при глобировании. [2] find ... -exec с + разделяет список аргументов.

9
ответ дан 22 May 2018 в 12:31
  • 1
    Благодарю. Как сделать это рекурсивно (для всех файлов во всех подпапках)? – Samo 17 March 2018 в 13:06
  • 2
    @Samo вижу мое редактирование :) – Zanna 17 March 2018 в 13:30
  • 3
    Не работает: $ rename '/ /. DAT / \ .dat /' ** bash: / usr / bin / rename: слишком длинный список аргументов – Samo 17 March 2018 в 13:45
  • 4
    @Samo вам нужно удалить -n из переименования после тестирования - это просто показать, что будет изменено – Zanna 17 March 2018 в 14:25
  • 5
    ОК. Я сделал. :) Оно работает. Благодарю. – Samo 17 March 2018 в 14:44

Эта ошибка выглядит так: Perl rename. Вам нужно использовать кавычки, но вам нужно только указать часть, которую вы хотите изменить, стиль поиска и замены. Синтаксис выглядит так:

rename -n 's/\.DAT/\.dat/' *

Удалите -n после тестирования, чтобы фактически переименовать файлы.

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

shopt -s dotglob

Если вы хотите переименовать файлы рекурсивно, вы можете использовать

shopt -s globstar rename -n 's/\.DAT/\.dat/' **

или если в текущей директории или ниже текущей директории, которая не заканчивается .DAT, существует много путей, вам лучше указать эти пути во второй команде:

rename -n 's/\.DAT/\.dat/' **/*.DAT

Это будет быстрее, если ваши файлы имеют разные имена, не заканчивающиеся на .DAT. [1]

To выключите эти настройки, вы можете использовать shopt -u, например shopt -u globstar, но они отключены по умолчанию и будут отключены при открытии новой оболочки.

Если это приводит к чрезмерно длинному списку аргументов, вы можете использовать, например, find:

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} \;

или лучше

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} +

Использование find ... -exec с + выполняется быстрее, чем при использовании \;, потому что это создает список аргументов из найденных файлов. Первоначально я думал, что вам не удастся использовать его, потому что вы упомянули, что у вас проблема с argument list too long, но теперь я знаю, что этот список также будет умно разбит на несколько вызовов команды по мере необходимости избегайте этой проблемы [1] .

Поскольку rename будет обрабатывать каждое имя файла таким же образом, не имеет значения, как долго список аргументов, так как он может быть безопасно разделен через несколько вызовов. Если команда, которую вы используете с -exec, не принимает несколько аргументов или требует, чтобы ее аргументы находились в определенном порядке или по какой-либо другой причине разделение списка аргументов вызовет что-то нежелательное, вы можете использовать \;, что вызывает команда, которая будет вызываться один раз для каждого найденного файла (если список аргументов слишком длинный для других методов, это займет много времени!).

Большое спасибо Элиа Кагану за очень полезные предложения по улучшению этого ответа:

[1] Указание имен файлов при глобировании. [2] find ... -exec с + разделяет список аргументов.

9
ответ дан 17 July 2018 в 18:38

Эта ошибка выглядит так: Perl rename. Вам нужно использовать кавычки, но вам нужно только указать часть, которую вы хотите изменить, стиль поиска и замены. Синтаксис выглядит так:

rename -n 's/\.DAT/\.dat/' *

Удалите -n после тестирования, чтобы фактически переименовать файлы.

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

shopt -s dotglob

Если вы хотите переименовать файлы рекурсивно, вы можете использовать

shopt -s globstar rename -n 's/\.DAT/\.dat/' **

или если в текущей директории или ниже текущей директории, которая не заканчивается .DAT, существует много путей, вам лучше указать эти пути во второй команде:

rename -n 's/\.DAT/\.dat/' **/*.DAT

Это будет быстрее, если ваши файлы имеют разные имена, не заканчивающиеся на .DAT. [1]

To выключите эти настройки, вы можете использовать shopt -u, например shopt -u globstar, но они отключены по умолчанию и будут отключены при открытии новой оболочки.

Если это приводит к чрезмерно длинному списку аргументов, вы можете использовать, например, find:

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} \;

или лучше

find -type f -name "*.DAT" -exec rename -n -- 's/\.DAT/\.dat/' {} +

Использование find ... -exec с + выполняется быстрее, чем при использовании \;, потому что это создает список аргументов из найденных файлов. Первоначально я думал, что вам не удастся использовать его, потому что вы упомянули, что у вас проблема с argument list too long, но теперь я знаю, что этот список также будет умно разбит на несколько вызовов команды по мере необходимости избегайте этой проблемы [1] .

Поскольку rename будет обрабатывать каждое имя файла таким же образом, не имеет значения, как долго список аргументов, так как он может быть безопасно разделен через несколько вызовов. Если команда, которую вы используете с -exec, не принимает несколько аргументов или требует, чтобы ее аргументы находились в определенном порядке или по какой-либо другой причине разделение списка аргументов вызовет что-то нежелательное, вы можете использовать \;, что вызывает команда, которая будет вызываться один раз для каждого найденного файла (если список аргументов слишком длинный для других методов, это займет много времени!).

Большое спасибо Элиа Кагану за очень полезные предложения по улучшению этого ответа:

[1] Указание имен файлов при глобировании. [2] find ... -exec с + разделяет список аргументов.

10
ответ дан 23 July 2018 в 19:27

Вы можете сделать:

rename -n 's/DAT$/\L$&/' *.DAT

Drop -n для фактического переименования.

glob pattern *.DAT соответствует всем файлам, заканчивающимся на .DAT в текущий каталог в подстановке rename, DAT$ соответствует DAT в конце \L$&, делает весь матч нижним; $& относится ко всему соответствию

Если вы просто хотите сделать для b1.DAT:

rename -n 's/DAT$/\L$&/' b1.DAT

Пример:

% rename -n 's/DAT$/\L$&/' *.DAT
rename(b1.DAT, b1.dat)
6
ответ дан 22 May 2018 в 12:31

Вы можете сделать:

rename -n 's/DAT$/\L$&/' *.DAT

Drop -n для фактического переименования.

glob pattern *.DAT соответствует всем файлам, заканчивающимся на .DAT в текущий каталог в подстановке rename, DAT$ соответствует DAT в конце \L$&, делает весь матч нижним; $& относится ко всему соответствию

Если вы просто хотите сделать для b1.DAT:

rename -n 's/DAT$/\L$&/' b1.DAT

Пример:

% rename -n 's/DAT$/\L$&/' *.DAT rename(b1.DAT, b1.dat)
6
ответ дан 17 July 2018 в 18:38

Вы можете сделать:

rename -n 's/DAT$/\L$&/' *.DAT

Drop -n для фактического переименования.

glob pattern *.DAT соответствует всем файлам, заканчивающимся на .DAT в текущий каталог в подстановке rename, DAT$ соответствует DAT в конце \L$&, делает весь матч нижним; $& относится ко всему соответствию

Если вы просто хотите сделать для b1.DAT:

rename -n 's/DAT$/\L$&/' b1.DAT

Пример:

% rename -n 's/DAT$/\L$&/' *.DAT rename(b1.DAT, b1.dat)
6
ответ дан 23 July 2018 в 19:27

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

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