Mam 291 ponumerowanych plików (zaczynających się od 001 - tytuł i kończących się na 291 - tytuł), które wymagają przeniesienia do oddzielnych katalogów. (Od 001 do 021 do folderu 1, od 022 do 053 do folderu 2, niekoniecznie jest to ta sama liczba plików za każdym razem).
Uznałem, że mógłbym to zrobić w tak szczęsliwy sposób: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Jestem prawie pewien, że jest lepszy sposób, więc co by to było?
EDYCJA: Więc to by działało dobrze, ale przypomniałem sobie ...
Nie utknąłem przy użyciu terminala, więc użyłem menedżera plików do klikania i przeciągania. Pytanie wciąż pozostaje aktualne.
ls -l | grep ^- | wc -l
uzyskać liczbę wierszy.Odpowiedzi:
Ponieważ powiedziałeś, że nie zawsze jest to dokładnie 21 plików, niż musisz przenieść pliki ręcznie, a aby to zrobić skutecznie, możesz użyć rozszerzenia nawiasów klamrowych :
źródło
file{001..21}name
, nie musisz używać symboli wieloznacznych. Tak czy inaczej, cieszę się, że ci się udało.Spowoduje to przeniesienie plików zgodnie z opisem (oprócz tego, że drugi zakres będzie wynosił od 022 do 042 dla drugich 21 plików).
źródło
Chodzi mi o to, aby przenieść wiele plików (na przykład dziesięć tysięcy lub milion), shell będzie narzekał na listę plików zbyt długo, jeśli użyjesz {1..20}, więc
W Zsh możesz załadować wbudowane mv :
po wykonaniu tej czynności możesz użyć polecenia:
lub jeśli piszesz jakieś skrypty powłoki, możesz zrobić coś takiego:
jeśli nie używasz zsh, możesz odnieść się do /unix/128559/solving-mv-argument-list-too-long
źródło