Jeśli ustawię bieżący / roboczy katalog (nawigując do niego za pomocą cd
) do jakiegoś konkretnego katalogu, a następnie wpisz:
rm *.xvg
Co zrobi to polecenie? Czy to prawda, że powyższe polecenie usuwa tylko pliki z rozszerzeniem .xvg
tylko w katalogu roboczym?
Byłem zdenerwowany próbowaniem tego przed zapytaniem, ponieważ chcę mieć absolutną pewność, że powyższe polecenie usunie tylko .xvg
pliki ZLOKALIZOWANE W KATALOGU PRACY .
rm -f {*.xvg,.*.xvg}
aby usunąć również ukryte pliki. Irm -R -f {*.xvg,.*.xvg}
aby usunąć także katalogi.Nie musisz nawigować do katalogu, po prostu użyj
W przypadku literówki lub podobnego błędu na ścieżce, gdzie / som / dir nie istnieje:
przypadkowo usunie wszystkie pliki .xvg w bieżącym katalogu. Pierwsze polecenie nie, i nie trzeba ponownie odtwarzać dysku CD.
Alternatywnym sposobem byłoby użycie find:
źródło
Tak,
rm *.xvg
usunie tylko pliki z rozszerzeniem.xvg
w bieżącym katalogu. Dlatego.Gdy wpiszesz takie polecenie, praca zostanie podzielona między używaną powłokę (załóżmy bash) i polecenie binarne.
Możesz zlokalizować plik binarny, pisząc
which rm
. Ten mały program zajmuje się rozłączaniem plików. Takie programy można uruchamiać z wiersza poleceń i mogą czytać listę argumentówprog arg1 arg2 arg3
podczas uruchamiania. W przypadkurm
są one interpretowane jako lista w pełni kwalifikowanych nazw plików do usunięcia. Więc jeśli jesteś w katalogu zawierającym plikfoo.bar
, wpisaniedelete 'foo.*'
spowodujerm: foo.*: No such file or directory
. Zwróć uwagę na pojedyncze cudzysłowy wokół wzorca pliku, nakazują powłoce przekazanie argumentu do powłoki w jej obecnej postaci.Jeśli jednak wpiszesz
rm *.bar
ten sam katalog, plik zostanie usunięty. To, co się tu dzieje, polega na tym, że twoja powłoka, której używasz do wpisywania poleceń, wykonuje pewne transformacje przed przekazaniem argumentów do polecenia. Jeden z nich nazywa się „rozwijaniem nazw plików”, inaczej znany jako „globbing”. Można wyświetlić listę plików bash rozszerzeń nazw tutaj . Jednym z najczęstszych rozszerzeń*
jest rozszerzenie nazw plików w bieżącym katalogu.Prostym sposobem na sprawdzenie globów w pracy jest użycie
echo
, które wypisuje wszystkie argumenty przekazane mu przez powłokę. Więc wpisanieecho *
w tym samym katalogu da wynikfoo.bar
. Więc kiedy piszeszrm *.bar
, to tak naprawdę dzieje się tak, że powłoka rozwija listę argumentów dofoo.bar
, a następnie przekazuje ją dorm
polecenia.Istnieje kilka sposobów kontrolowania globowania. Na przykład w najnowszych wersjach bash możesz włączyć opcję o nazwie globstar, która spowoduje rekursywną ekspansję. Wpisanie
echo **/*.bar
pokaże listę wszystkich plików kończących się.bar
we wszystkich podfolderach. Więc wpisanierm **/*.bar
bash z włączoną globstar rzeczywiście rekurencyjnie usunie wszystkie pasujące pliki w podfolderach.źródło
Dowództwo :
pracuje dla mnie
Dowództwo:
wydaje polecenie błędu (po polsku, przetłumaczone):
w
źródło