Wystąpił błąd, gdy przetestowałem polecenie dla wielu pozycji: mv ~ / Linux / Old /! (Tux.png Tux1.png Tux2.png) ~ / Linux / New / Opróżnia cały stary katalog. Co jest nie tak?
@Juliano Jestem raczej zdezorientowany wzorcami takimi jak: mv ~ / Linux /? (Tux * .png) ~ / Linux / New / mv ~ / Linux / + (Tux * .png) ~ / Linux / New / W pierwszym , Chciałem przenieść 0-1 Tux - zdjęcie. W tym drugim przypadku chciałem przenieść zdjęcia 1-n Tux. Poruszyli wszystko. Czemu? Czy można przenieść określoną ilość zdjęć?
więc Backups.backupdb/jest źle tutaj przed negacją i nie użyłbym go również do przenoszenia katalogów ze względu na ryzyko niewłaściwego użycia then globs z innymi poleceniami i możliwymi innymi wyjątkami.
To jest właściwie prawidłowa odpowiedź. Mój był całkowicie zły; na szczęście użyłem go w folderze zawierającym tylko kilka plików. Tutaj jest więcej informacji o metodzie, którą pokazuje Masi: wiki.bash-hackers.org/syntax/pattern Przejdź do "Rozszerzony język wzorców", a znajdziesz więcej informacji na ten temat. Podziękowania dla @ paul-whittaker za wskazanie problemu.
To stara odpowiedź, ale wciąż aktualna. Używam Ubuntu 18 i wydaje się, że extglob jest domyślnie włączony (nie kupowałem tego). Użyłem następującego polecenia, aby przenieść wszystkie pliki z bieżącego katalogu do archiwum, które również znajduje się w tym katalogu, BEZ innych folderów archiwum: mv !(arc*) archive_190629b
-maxdepth 1sprawia, że nie przeszukuje rekurencyjnie. Jeśli zależy Ci tylko na plikach, możesz powiedzieć -type f. -mindepth 1sprawia, że nie zawiera ~/Linux/Oldsamej ścieżki w wyniku. Działa z dowolnymi nazwami plików, w tym z tymi, które zawierają osadzone znaki nowej linii.
Jeden komentarz wskazuje, że -topcja mv jest prawdopodobnie rozszerzeniem GNU. W przypadku systemów, które go nie mają
Za uznaniem, ponieważ zachęca do nauki potężnego narzędzia, znajdź. Uwaga, dla plików z białymi znakami to nie zadziała. Rozważ "find -print0 | xargs -0" albo zrezygnuj z xargs: "znajdź [co powiedziałeś] -exec mv -t {} ~ / Linux / New \;"
Jeśli twoje polecenie mv nie ma opcji -t, użyj "find ... -exec mv {} Linux / New \;" lub „find ... | xargs -I {} mv {} Linux / New”. Opcja -t wydaje się być rozszerzeniem GNU, które jest dobre dla Linuksa, ale prawdopodobnie nie gdzie indziej.
jhs, och, zawodzę. jakoś pomyślałem, że xargs dzieli się na nowej linii, ale nie na spacjach. wygląda na to, że pomyliłem to z „czytaj” :) źle to napraw
Wielkie dzięki za niesamowitą wskazówkę! Miałem zamiar wybrać coś, ponieważ dotyczy tego pytania. Jednak później mogę wyczuć przydatność twoich poleceń, więc muszę wybrać sposób „znajdź i xargs”. Po prostu rządzi. Dzięki :)
Jest to z pewnością intuicyjne, ale powyższe odpowiedzi są lepsze. Jeśli na przykład piszesz skrypt, wymagałoby to umieszczenia we właściwym katalogu ..
Poniższa metoda nie jest metodą gwarantowaną w 100% i nie należy jej w ogóle podejmować w przypadku skryptów. Ale czasami wystarczy do szybkiego użycia powłoki interaktywnej. Plik glob, taki jak
[abc]*
(który dopasuje wszystkie pliki o nazwach zaczynających się od a, b lub c) można zanegować, wstawiając najpierw znak „^”, tj.
[^abc]*
Czasami używam tego, aby nie dopasować katalogu „lost + found”, na przykład:
mv /mnt/usbdisk/[^l]*/home/user/stuff/.
Oczywiście, jeśli są inne pliki zaczynające się od l, muszę je później przetworzyć.
mv `find Linux/Old '!' -type d | fgrep -v Tux.png`Linux/New
Polecenie find wyświetla listę wszystkich zwykłych plików, a polecenie fgrep odfiltrowuje wszystkie pliki Tux.png. Backticks mówią mv, aby przenieść wynikową listę plików.
Nigdy, przenigdy nie oceniaj find jako argumentów dla innego polecenia. Zdarzą się złe rzeczy. Być może właśnie stworzyłeś lukę. Zawsze używaj polecenia find -print0 | xargs -0 konstrukcja lub znajdź -exec.
Wydaje się, że w tym poleceniu brakuje jednej części i nie działa na moim komputerze. ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/zamiast tego działa.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.