Jak mogę przenieść wszystkie pliki oprócz jednego? Szukam czegoś takiego:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
gdzie przenoszę stare rzeczy do nowego folderu z wyjątkiem Tux.png
. ! -znak reprezentuje negację. Czy jest jakieś narzędzie do tej pracy?
Umieść następujący plik w swoim .bashrc
Rozszerza wyrażenia regularne. Następnie możesz przenieść wszystkie pliki oprócz jednego o
Wyjątki w stosunku do innych poleceń
Zauważ, że podczas kopiowania katalogów, forward-flash nie może być użyty w nazwie, jak zauważono w wątku. Dlaczego extglob oprócz łamania oprócz warunku? :
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.źródło
mv !(arc*) archive_190629b
Wybrałbym tradycyjny sposób znajdowania i xargs:
-maxdepth 1
sprawia, że nie przeszukuje rekurencyjnie. Jeśli zależy Ci tylko na plikach, możesz powiedzieć-type f
.-mindepth 1
sprawia, że nie zawiera~/Linux/Old
samej ś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
-t
opcja mv jest prawdopodobnie rozszerzeniem GNU. W przypadku systemów, które go nie mająźródło
Szybkim sposobem byłoby zmodyfikowanie nazwy pliku tux, aby polecenie ruchu nie pasowało.
Na przykład:
źródło
Myślę, że najłatwiej to zrobić za pomocą graweru
Edytować:
Zamiast tego użyj odwrotnego ukośnika z ls, aby zapobiec używaniu go z aliasem, np. Większość ls jest aliasowana jako ls --color.
Dzięki @Arnold Roa
źródło
grep -v
tam używasz ?Dla bash, sth odpowiedź jest poprawna. Oto składnia zsh (moja wybrana powłoka):
Wymaga ustawienia
EXTENDED_GLOB
opcji powłoki.źródło
Uważam, że jest to nieco bezpieczniejsze i łatwiejsze do oparcia w przypadku prostych ruchów, które wykluczają określone pliki lub katalogi.
źródło
-l
Opcjals
będzie zawierać wiele nieistotnych informacji w linii poleceń i spowodować niepowodzenie polecenia mv.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
(który dopasuje wszystkie pliki o nazwach zaczynających się od a, b lub c) można zanegować, wstawiając najpierw znak „^”, tj.
Czasami używam tego, aby nie dopasować katalogu „lost + found”, na przykład:
Oczywiście, jeśli są inne pliki zaczynające się od l, muszę je później przetworzyć.
źródło
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.
źródło
Co powiesz na przeniesienie wszystkiego w folderze, a następnie przeniesienie pliku Tux.png z powrotem?
Nie przychodzi mi do głowy żadna składnia powłoki, która mogłaby powiedzieć „wszystko oprócz…” od ręki.
źródło
źródło
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
zamiast tego działa.Co powiesz na:
Musisz jednak być w folderze.
źródło
Można pominąć grep w ten sposób:
źródło
To mogłoby być prostsze i łatwe do zapamiętania i działa dla mnie.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
źródło