-1

Найдите файлы с именами короче 7 символов и переименуйте их в .new

ls | grep -E "^.{,6}$"| xargs -I {} -t mv {} .new

нет работы

3 ответа3

0

Используйте цикл for и шаблон сглаживания, например так: for file in !(???????*); do mv $file $file.new; done

Спасибо ксеноиду за правильную структуру шара.

0

Использование find с -regex:

... и предполагая, что файлы находятся в текущем каталоге (учитывая первоначальный вопрос)

find -regextype egrep -regex '^.{1,6}$' -exec mv {} .new

Регулярные выражения в find принимают различные синтаксисы, так что это хорошая идея, чтобы быть явным. Также, если вы хотите отсканировать несколько каталогов, обратите внимание, что в отличие от name , -regex применяется ко всему пути к файлу, поэтому адекватный шаблон исправления будет '.*/[^\]{1,6}'

0

Учитывая, что файлы с именами от 1 до 6 символов не являются файлами с 7 или более символами:

mv !(???????*) .new

(???????* соответствует именам от 7 символов и более, а !() отрицает это). Этот ответ предполагает, что у вас есть только одно возможное совпадение (что, по-видимому, подразумевает ваш вопрос в его нынешнем виде).

Если у вас есть несколько совпадений, используйте шаблон в цикле for :

for f in !(???????*); do ... ; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .