Поиск и переименование файлов по шаблону работает в Debian, но не в CentOS7 - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно найти и переименовать файлы с вопросительным знаком в именах. Пример: "style. css? Ver = 111" должно стать "style. css"

Я использую эту команду

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

В Debian все работает нормально, но в CentOS7 Я получаю и ошибку, что «переименовать: недостаточно аргументов»

Есть идеи, почему?

1 Ответ

1 голос
/ 01 апреля 2020

Для надежного варианта, который должен работать в любой POSIX-совместимой системе, вы можете использовать

find . -type f -name "*\?*" -exec sh -c 'mv -- "$1" "${1%%\?*}"' findshell {} \;

$1 - это имя каждого найденного файла, а ${1%%\?*} - это конструкция, которая удаляет подстроку. начиная с вопросительного знака.

Этого должно быть достаточно, если у вас есть несколько подходящих файлов. Если вам это нужно, более эффективная альтернатива -

find . -type f -name "*\?*" -exec sh -c '
    for file in "$@"; do
        mv -- "$file" "${file%%\?*}"
    done
' findshell {} +
...