Używam następującego polecenia, aby wyczyścić katalog, pliki i katalogi powyżej 30 dni, i przenieść je do katalogu archiwum, który mogę usunąć po kilku tygodniach, jeśli nikt nie poprosi o ich odzyskanie. Katalog docelowy ma podkatalogi według nazwy użytkownika, podobnie jak katalog archiwum.
Oto polecenie, którego używam:
find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;
Zasugerowałem zmodyfikowaną wersję tego, aby odpowiedzieć na pytanie zadać ubuntu inny użytkownik edytować kod, aby zmienić końca linii \;
dla +
jak to szybciej (i bardziej poprawne?). Spójrz tutaj
Jednak użycie +
w ten sposób działa, jeśli -exec
polecenie ls -lh
nie zawiera rzeczywistego polecenia, którego używam. Jeśli spróbuję, pojawi +
się komunikat o błędzie:
find: missing argument to '-exec'
Nie rozumiem, dlaczego tak się zachowuje ani jakie byłoby prawidłowe polecenie. Proszę nie pisać tylko korekty polecenia, chciałbym raczej zrozumieć niż ślepo stosować się do sugestii.
źródło
+
dostarcza wielu argumentów do tego samego polecenia, alemv
nie mogę sobie z tym poradzić!Odpowiedzi:
Użytkownik w tym poście może powiedzieć, że
+
znak na końcu-exec
polecenia jest szybszy, ale nie dlaczego.Załóżmy, że
find
polecenie zwróci następujące pliki:Normalne
-exec
polecenie (-exec command {} \;
) jest uruchamiane raz dla każdego pasującego pliku. Na przykład:Wykonuje:
Jeśli używasz
+
znaku (-exec command {} +
), komenda jest budowana przez dodanie wielu dopasowanych plików na końcu polecenia. Na przykład:Wykonuje:
Aby
+
poprawnie użyć flagi, argument do przetworzenia musi znajdować się na końcu polecenia, a nie w środku. Dlatego w twoim przykładziefind
trowsmissing argument to '-exec'
; tęskni za zamknięciem{}
.źródło
find -exec
wymaga,{}
aby był to ostatni argument, gdy jest używany z+
. Czy ktoś wie, dlaczego podjęto tę decyzję projektową, zamiast pozwolić konstrukcjom takim jak wiersz poleceń OP?Użytkownik wyjaśnił ich edycję ...
... używając tego linku . Myślę, że w zasadzie zamiast używać wielu poleceń, wysyła wszystkie nazwy plików do jednej instancji polecenia, aby przyspieszyć. Oto przykład z tego miejsca :
Istnieją inne formularze dostępne za pomocą
;
i+
również ( stąd :)Dlatego dozwolona jest następująca przykładowa składnia polecenia find:
JEDNAK nie jestem pewien, czy to i tak będzie działać z poleceniem move, ponieważ jest to składnia
mv [OPTION]... SOURCE DEST
, chyba że-t
użyto opcji lub podobnego. Powinien jednak działać bezls
żadnych dodatkowych opcji itp., Ponieważ mogą zrozumieć, gdy podano wiele nazw plików.+
Mogą również muszą być uciekł (tj\+
)źródło
mv -t
oba + 1!