Найдите файлы с именами короче 7 символов и переименуйте их в .new
ls | grep -E "^.{,6}$"| xargs -I {} -t mv {} .new
нет работы
Используйте цикл for и шаблон сглаживания, например так: for file in !(???????*); do mv $file $file.new; done
Спасибо ксеноиду за правильную структуру шара.
find
с -regex
:... и предполагая, что файлы находятся в текущем каталоге (учитывая первоначальный вопрос)
find -regextype egrep -regex '^.{1,6}$' -exec mv {} .new
Регулярные выражения в find
принимают различные синтаксисы, так что это хорошая идея, чтобы быть явным. Также, если вы хотите отсканировать несколько каталогов, обратите внимание, что в отличие от name
, -regex
применяется ко всему пути к файлу, поэтому адекватный шаблон исправления будет '.*/[^\]{1,6}'
Учитывая, что файлы с именами от 1 до 6 символов не являются файлами с 7 или более символами:
mv !(???????*) .new
(???????*
соответствует именам от 7 символов и более, а !()
отрицает это). Этот ответ предполагает, что у вас есть только одно возможное совпадение (что, по-видимому, подразумевает ваш вопрос в его нынешнем виде).
Если у вас есть несколько совпадений, используйте шаблон в цикле for
:
for f in !(???????*); do ... ; done