Mam katalog z dużą ilością plików i katalogów. Aby to uporządkować, zamierzam umieścić wszystkie te pliki w katalogu, więc zamierzałem zrobić coś takiego:
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
Jednak, że oczywiście nie będzie działać, bo wtedy będzie starał się przenieść new_directory
na new_directory
. Czy jest jakiś prosty sposób na zrobienie tego, co chcę w jednym wierszu bez konieczności kopiowania i wklejania wszystkich plików i katalogów w tym katalogu?
Odpowiedzi:
Twój
polecenie faktycznie będzie działać; po prostu wydrukuje ostrzeżenie, że nie może przenieść tego katalogu do siebie.źródło
git mv
musisz użyć-k
flagi, ponieważ git domyślnie zawiedzie, a nie tylko wyrzuci ostrzeżenie. Więc musisz to zrobićgit mv -k * ./new_dir
.Szybki i brudny oneliner.
źródło
Jeśli szukasz tylko plików (tzn. Nie katalogów), to
jest najbardziej przenośnym rozwiązaniem. Aby zwiększyć szybkość, powinieneś przenosić find i xargs, używając -print0 i -0, ale tylko jeśli masz GNU find i xargs.
źródło
find
- chociaż zdecydowanie byłem na systemach, które nie mają, niestety :(Kiedy miałem ten problem, robiłem jedną z następujących czynności:
lub
Druga forma korzysta z symboli wieloznacznych pomijających nazwy plików, które zaczynają się od „.”
źródło
co powiesz na:
IOW, nie przenoś zawartości do nowego katalogu, ale umieść ten katalog w nowym.
źródło
W podobny sposób jak odpowiedź @ Rembrane (choć nie jest to jedna linijka):
Powinno to być w 100% przenośne - nawet jeśli
find
niestety nie ma go w twoim systemie.źródło
Moje sugestie: jak stwierdzili inni
będzie działać, aby znaleźć IFF, całkowite rozszerzenie jest wystarczająco krótkie.
Z drugiej strony możesz wypróbować ten, który skaluje się do znacznie większej liczby plików:
Wyjaśnienie
źródło
-print0
i-0
i nadal przerw.Posługiwać się:
Ze strony podręcznika
xargs
:źródło
Aby uniknąć komunikatu o błędzie i uprościć:
zrobi to samo, ale uniknie komunikatu o błędzie (chyba że w nazwach folderów są kropki).
źródło