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:
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
.new
?Odpowiedzi:
Za pomocą
find
z-regex
:... i zakładając, że pliki znajdują się w bieżącym katalogu (biorąc pod uwagę początkowe pytanie)
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 tegoname
,-regex
odnosi się do całej ścieżki do pliku, a zatem będzie odpowiedni wzór łatania'.*/[^\]{1,6}'
źródło
Biorąc pod uwagę, że pliki o nazwach 1-6 znaków nie są tymi z 7 lub więcej znakami:
(
???????*
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:źródło
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.
źródło