Znajdź pliki o nazwach krótszych niż 7 znaków i zmień ich nazwę na nazwę pliku .new


-1

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


Przemianować wszystko z nich do .new ?
thrig

Wszystkie pliki w katalogu domowym
Владимир Владимир

Jeśli masz kilka pasujących plików, wszystkie powinny zostać przemianowane na „.new” (gwarantowane zderzenie nazw ...)?
xenoid

Odpowiedzi:


0

Za pomocą 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}'


0

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

To nie działa. 'mv' próbuje przenieść pliki do nieistniejącego katalogu o nazwie '.new'. Jestem pewien, że można to zrobić tylko za pomocą pętli for.
JosefScript

Początkowe pytanie jest dziwne, ponieważ jeśli i tak nie zadziałałoby, gdyby było kilka pasujących plików, to tylko pierwsza byłaby zmieniona. Chyba że PO sugeruje, że i tak będzie tylko jeden mecz, w takim przypadku to zadziała.
xenoid

OP powiedział „pliki”, co oznacza liczbę mnogą. Nie określił tego dokładnie, ale w moim rozumieniu stara się nadać tym plikom rozszerzenie ”. Nowy'. Dlaczego chcesz przenieść kilka plików do jednego ukrytego pliku?
JosefScript

0

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.