Mam dwa pytania. Po pierwsze, które polecenie wyświetla listę plików i katalogów, a najpierw katalogi?
Drugie pytanie: Chcę skopiować listę plików do jednego katalogu, ale ustaw katalog docelowy jako pierwszą nazwę pliku w poleceniu.
command-line
shell-script
ls
Elham abbasi
źródło
źródło
ls
ma--group-directories-first
przełącznik.-t
jest prawdopodobnie opcją tylko dla GNU,cp
która pobiera jawny katalog docelowy i dlatego może iść w dowolne miejsce w wierszu poleceń, w tym na początku.Odpowiedzi:
Masz GNU?
Wersja GNU
ls
ma--group-directories-first
. Icp
ma-t
.Brak GNU?
W systemach, które nie mają GNU
ls
, najlepszym rozwiązaniem są dwa kolejne połączeniafind
z-maxdepth n
/-mindepth n
i-type t
z odpowiednimi opcjami.W przypadku kopiowania plików, najpierw celem jest napisanie skryptu, który zapisuje pierwszy argument, a następnie używa go
shift
i dołącza na końcu.Uważaj!
Jeśli planujesz używać ich razem - to znaczy, zbierając listę z (
find
lubls
ewentualnie używającxargs
) i przekazując ją docp
(lubcp
opakowania), powinieneś zdawać sobie sprawę z niebezpieczeństw związanych z analizowaniem list plików (w zasadzie nazwy plików mogą zawierać znaki takie jak znaki nowej linii, które mogą zepsuć skrypt). Konkretnie, spojrzeniefind
„s-exec
oraz-print0
opcji ixargs
” s-0
opcja.Alternatywne narzędzie do wydajnego kopiowania drzew katalogów.
Zamiast tego możesz spróbować użyć
rsync
; ma wiele funkcji, które mogą ułatwić Ci pracę.źródło
--group-directories-first
).ls --version
aby dowiedzieć się, który masz.Najpierw wyświetlenie katalogów spoza GNU
ls
:ls -l | sort
Zauważ, że to wyświetli listę wszystkich dziwnych rzeczy, takich jak dowiązania symboliczne, gniazda i rury (oczywiście odpowiednio zgrupowane), ale biorąc pod uwagę, że rzeczy są dość rzadkie, nie powinno to stanowić problemu. W przeciwnym razie byłby to filtr
ls -l | grep '^(-|d)' | sort
źródło
sort -r
.działa dla bash i zsh
wystarczy dodać alias w ~ / .bashrc lub ~ / .zshrc
Również jeśli masz ZSH, możesz użyć narzędzia „k”
po prostu zainstaluj go z antygenem, umieszczając następujące polecenie w ~ / .zshrc
źródło
W przypadku systemów innych niż GNU awk może filtrować wszystkie pozostałe pola:
ls -l
musi zawierać 9 pólDane wyjściowe wyglądają tak,
ls -1
ale na pierwszym miejscu są katalogi:Zgodnie z „Długim formatem” strony podręcznika ls, gdy w grę wchodzą inne typy plików, kolejność wyjściowa powinna wynosić:
Przydatna funkcja bash (umieść ją w .bash_profile lub .bashrc):
źródło
W przypadku
zsh
list ukończeń możesz ustawićlist-dirs-first
styl, abytrue
katalogi były wyświetlane jako pierwsze. W twoim~/.zshrc
:(tutaj zastosowano do wszystkich widgetów uzupełniających, które go obsługują i do wszystkich poleceń; możesz to ograniczyć, jeśli chcesz, zobacz
zstyle
dokumentację w celu uzyskania szczegółowych informacji)Jeśli jeszcze tego nie zrobiłeś, upewnij się, że biegniesz,
compinstall
aby uzyskać kolorowe listy ukończenia z opisami itp. I wszystkimi innymi dodatkami.źródło