Odpowiedzi:
W przypadku folderu o nazwie „mój folder” i wyższego poziomu w hierarchii plików (punkt, w którym chcesz go umieścić), polecenie brzmiałoby:
mv myfolder/* .
Na przykład, jeśli dane były w /home/myuser/myfolder
środku, /home/myuser/
uruchom polecenie.
.*
. Usunięcie oryginalnego folderu jest trywialne i nie jest wymagane, więc pozwolimy OP sobie z tym poradzić.
*
i .*
w jednej linii? tylko ciekawość
mv
będą źródłami oprócz argumentu LAST, który musi być celem przenoszenia (w przypadku wielu źródeł musi to być folder).
/bin/mv: Argument list too long
Żeby było jasne, wzięte z powyższej odpowiedzi Rudu i komentarzy.
Jeśli chcesz przenieść całą zawartość, W TYM pliki zaczynające się od. (takich jak .htaccess, .git itp.), musisz uwzględnić w poleceniu zarówno *, jak i *. Tak jak:
mv subfolder/* subfolder/.* .
Spowoduje to przeniesienie zawartości podfolderu do bieżącego folderu. Zwróć uwagę na spację przed ostatnim „.”.
mv: rename fake/. to ./.: Invalid argument
imv: rename fake/.. to ./..: Invalid argument
Jest to możliwe przy użyciu następujących metod:
Używanie rsync
:
rsync -vua --delete-after foo/ .
Korzystanie cp
i rmdir
:
cp -vaR foo/. . && rmdir foo/
Używając mv
(z dotglob
włączoną opcją):
shopt -s dotglob # Includes filenames beginning with a dot.
mv -- foo/* . # Where foo/ is the folder consisting the files.
shopt -u dotglob # Disables previously enabled dotglob option.
gdzie foo/
jest twój folder, którego zawartość ma zostać przeniesiona o jeden poziom wyżej.
Zobacz: help shopt
i man bash
.
Za pomocą mv
(jak sugerowano tutaj ):
mv foo/* foo/.[^.]* . && rmdir foo/
Uwaga: pominąłby plik o nazwie foo/..bar..
.
Uwaga: Do powłok POSIX potrzebujesz [!.]
.
-v
, -u
, -a
i -r
robi? AFAICT, -v
jest pełne, co powoduje, że rsync drukuje więcej informacji. -u
oznacza aktualizację - skopiuj plik tylko wtedy, gdy jest nowszy. To nie wydaje się istotne. -a
oznacza archiwum. Spowoduje to skopiowanie właściciela i uprawnień do pliku, a synchronizacja będzie rekurencyjna. -r
oznacza rekurencyjny, ale już to obejmuje -a
.
-u
jest przydatny, gdy nie chcesz tracić dodatkowego czasu na przenoszenie danych, które już tam są (szczególnie w przypadku powolnych urządzeń pamięci masowej). Usunąłem -r
, ponieważ jest objęty, -a
jak wspomniałeś.
mv foo/* foo/.[^.]* .
pominąłby foo/..bar..
na przykład plik o nazwie . Zauważ, że do powłok POSIX potrzebujesz [!.]
.
rsync -vua --delete-after foo/ .
usuwa wszystko, co może już istnieć w bieżącym katalogu.
po prostu wydaj polecenie mv
mv (directory)/* .
jeśli chcesz usunąć katalog, dodaj
rm -rf (directory)
Zakładając, że znajdujesz się w katalogu nadrzędnym (katalog)
Jeśli jesteś w (katalogu), to
mv * ../
rmdir
narzeka i wychodzi, jeśli katalog nie jest pusty, a rm -r
zamiast tego po prostu usunąłby go i całą jego zawartość. (To poka-jarzmo .)
.DS_store
w macOS. Powyższe mv
polecenie nie przenosi ich (bez dotglob
zestawu).
dla tych z was na wspólnym serwerze musielibyście użyć czegoś takiego
Aby przenieść pliki
mv -v ~/public_html/public_html/* ~/public_html/
Aby skopiować pliki
cp -a ~/public_html/public_html/* ~/public_html/
.*
nie tylko*
wtedy, gdy archiwum zawiera pliki kropkowe. Dodaj również `&& rmdir myfolder` na końcu, aby usunąć niepotrzebny folder. Jest to zapisywane, ponieważ będzie działać tylko wtedy, gdy mv zwróci sukces ORAZ ponieważ rmdir nie usunie niepustego katalogu.