Jestem na ścieżce:
/myuser/downloads/
I tworzę podfolder:
/myuser/downloads/new
Teraz chcę przenieść wszystkie pliki i foldery / podfoldery z folderu pobierania do podfolderu.
jak mogę to zrobić?
Próbowałem:
mv -R *.* new/
Ale wydaje się, że ruch nie wymaga przełącznika -R.
mv * new
, że będzie jęczeć „nie można przenieść nowego na nowy” lub coś podobnego. Być możemv -i * new
zapobiegniesz nadpisywaniu.Odpowiedzi:
Komenda
powinien załatwić sprawę. Jeśli to nie działa, uruchom
shopt -s extglob
najpierw.Aby przenieść także ukryte pliki / katalogi (zaczynające się od kropki), uruchom także
shopt -s dotglob
najpierw.Więc by podsumować:
(zawsze lepiej jest rozbroić,
dotglob
aby uniknąć złych niespodzianek).źródło
!(something)
?dev
do mojej bieżącej lokalizacji, czy muszę wykonaćmv !(dev) dev
? Dostaję-bash: !: event not found
setopt extendedglob
ustawić rozszerzony tryb globalny w Zsh.^
jest symbolem wykluczenia, więcmv ^new new
załatwi sprawę. następnie, aby zobaczyć wszystkie opcje ustawione w zsh, których możesz użyćsetopt
i aby wyłączyć rozszerzony tryb globalny, możeszunsetopt extendedglob
Znalazłem coś takiego, ale jest nieco prostsze do zrozumienia i może również dobrze działać dla Ciebie:
Dodanie wyjaśnienia do powyższego rozwiązania:
Ze stron podręcznika:
mv -t
grep -v
Wyjaśnione krok po kroku:
ls
wyświetli listę plików w bieżącym katalogugrep -v new
zwróci potok do tego, że nie pasuje do nowegoxargs mv -t new
przeniesie pliki przesyłane do niego zgrep -v
katalogu docelowegoźródło
mv: illegal option -- t
. Czy to dlatego, że używamzsh
?mv
(co oznacza, że twoja wersja mv różni się od tego, czego używałem), jakiego systemu używasz? Wierzę, że gdy pisałem tę odpowiedź byłem na linux distrocentos
użyciubash
.mv: illegal option -- t
ponieważ mv osxa nie ma-t
opcji.zsh
system operacyjny OSX , więc prawdopodobnie jest to system operacyjny…? Dzięki za wytłumaczenie!Prosty pomysł. Zakładając, że jesteś w / myuser , zmień nazwę pobrań na nowy , utwórz nowy katalog pobrań, a następnie przenieś do niego nowy .
źródło
Jeśli chcesz przenieść wszystkie pliki z folderu do jednego z jego podfolderów, możesz użyć następującego polecenia:
Znajduje wszystkie pliki, a następnie przenosi je do podfolderu.
@waltinator: dodano,
-type d -name 'new' -prune
aby zapobiec przejściu/myuser/downloads/new
.źródło
new
i wypróbowałem to polecenie, otrzymujęmv: missing file operand
iTry 'mv --help' for more information
Możesz wypróbować ten alternatywny proces –– pozostać na ścieżce
ale zamiast najpierw utworzyć
/myuser/downloads/new/
katalog, zamiast tego utwórz folder w/myuser/
katalogu za pomocą poleceniamkdir ../new
, a następnie przenieś wszystkie plikidownloads
donew
i w końcu przejdźnew
dodownloads
. Możesz to zrobić w jednym wierszu na/myuser/downloads/
ścieżce za pomocą polecenia:W takim przypadku nie musisz się martwić o jakiekolwiek „filtrowanie” plików / folderów, ponieważ
new
jest na tym samym poziomie ścieżki, codownloads
, więc możesz po prostu przenieść wszystkodownloads
donew
, a następnie przejśćnew
do pobierania.Jeśli jednak masz już
new
utworzony podfolder i nie chcesz tworzyć innego, nie martw się - po prostu zmieńmkdir
polecenie po lewej stronie pierwszego&&
w powyższymmv
poleceniu na polecenie, przesuwając wnew
górę ścieżka; innymi słowy, gdy jesteś jeszcze w środku/myuser/downloads/
, możesz zmienićmkdir ../new
namv new ..
. Następnie podfoldernew
[na ścieżce/myuser/downloads/new/
] zostaje wypchnięty do/myuser/new/
, na tym samym poziomie co/myuser/downloads/
, a następnie możesz uruchomić resztę polecenia, jak pokazano powyżej. Wszyscy razem zaczynamy od ścieżki/myuser/downloads/
:a ponieważ chcesz „przenieść wszystkie pliki i foldery / podfoldery z folderu pobierania do podfolderu [
new
]”, gotowe! Jeśli chcesz przenieść tylko pliki (lub tylko foldery lub [wstaw bardziej szczegółowy ruch obiektu]), musisz użyć innych poleceń, które mogą „filtrować” obiekty, takie jakgrep
. Powyższe polecenia są jednak wystarczające do twoich celów.źródło