Znajdź pliki o nazwach krótszych niż 7 znaków i zmień ich nazwę na nazwę pliku .new
ls | grep -E "^.{,6}$"| xargs -I {} -t mv {} .new
bez pracy
Znajdź pliki o nazwach krótszych niż 7 znaków i zmień ich nazwę na nazwę pliku .new
ls | grep -E "^.{,6}$"| xargs -I {} -t mv {} .new
bez pracy
Odpowiedzi:
find z -regex: ... i zakładając, że pliki znajdują się w bieżącym katalogu (biorąc pod uwagę początkowe pytanie)
find -regextype egrep -regex '^.{1,6}$' -exec mv {} .new
Regexps in find zaakceptuj różne składnie, więc dobrze jest być wyraźnym. Również jeśli chcesz, zeskanuj kilka katalogów, zwróć uwagę, niż w przeciwieństwie do tego name, -regex odnosi się do całej ścieżki do pliku, a zatem będzie odpowiedni wzór łatania '.*/[^\]{1,6}'
Biorąc pod uwagę, że pliki o nazwach 1-6 znaków nie są tymi z 7 lub więcej znakami:
mv !(???????*) .new
( ???????* dopasowuje nazwy 7 znaków lub więcej i !() neguje to). Ta odpowiedź zakłada, że masz tylko jedno możliwe dopasowanie (które twoje pytanie wydaje się sugerować w obecnej formie).
Jeśli masz kilka dopasowań, użyj wzoru w a for pętla:
for f in !(???????*); do ... ; done
Użyj pętli for i wzoru globbingowego w ten sposób: for file in !(???????*); do mv $file $file.new; done
Dzięki ksenoidowi za prawidłowy wzór globu.
.new?