Dlaczego poniższe elementy nie kopiują plików do folderu docelowego?
# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
\;
?find -iname '*.mp3' -mtime -1 -exec cp {} /home/my_path/ \;
czy jest coś nie tak z tym poleceniem? to nie działanapotkałem problem podobny do tego ...
Właściwie na dwa sposoby można przetwarzać
find
dane wyjściowecopy
polecenia w poleceniuJeśli wynik
find
polecenia nie zawiera spacji, tj. Jeśli nazwa pliku nie zawiera spacji, możesz użyć poniższego polecenia:Składnia:
find <Path> <Conditions> | xargs cp -t <copy file path>
Przykład:
find -mtime -1 -type f | xargs cp -t inner/
Ale w większości przypadków nasze pliki danych produkcyjnych mogą zawierać miejsce. Więc przez większość czasu poniższe polecenie jest bezpieczniejsze:
Składnia:
find <path> <condition> -exec cp '{}' <copy path> \;
Przykład
find -mtime -1 -type f -exec cp '{}' inner/ \;
W drugim przykładzie ostatnia część, tj. Średnik, jest również traktowana jako część
find
polecenia, którą należy zmienić przed naciśnięciem klawisza Enter. W przeciwnym razie pojawi się błąd podobny do tegoW twoim przypadku składnia polecenia kopiowania jest nieprawidłowa , aby skopiować plik znalezienia do
/home/shantanu/tosend
. Następujące polecenie zadziała:źródło
find
/xargs
,find <Path> <Conditions> -print0 | xargs -0 -r cp -t <copy file path>
. Przykład:find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/
Musisz użyć
cp -t /home/shantanu/tosend
, aby powiedzieć, że argument jest katalogiem docelowym, a nie źródłem. Następnie możesz zmienić go na-exec ... +
,cp
aby skopiować jak najwięcej plików naraz.źródło
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp --target-directory=/home/shantanu/tosend {} \;
źródło
Powodem tego błędu jest to, że próbujesz skopiować folder, który wymaga opcji -r również do cp Dzięki
źródło