Musíte použít cp -t /home/shantanu/tosend
abychom mu řekli, že argument je cílový adresář a ne zdroj. Poté jej můžete změnit na -exec ... +
abyste získali cp
zkopírovat co nejvíce souborů najednou.
Pokud je vaším záměrem zkopírovat nalezené soubory do /home/shantanu/tosend
, máte pořadí argumentů do cp
obráceně:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Poznámka:find
příkaz použijte {}
jako zástupný symbol pro odpovídající soubor.
čelil jsem problému podobnému tomuto...
find
můžete zpracovat dvěma způsoby výstup příkazu v copy
příkaz
-
Pokud
find
výstup příkazu neobsahuje žádnou mezeru, tj. pokud název souboru neobsahuje mezeru, můžete použít níže uvedený příkaz:Syntaxe:
find <Path> <Conditions> | xargs cp -t <copy file path>
Příklad:
find -mtime -1 -type f | xargs cp -t inner/
-
Většinu času však naše soubory produkčních dat mohou obsahovat prostor. Takže většinu času níže uvedený příkaz je bezpečnější:
Syntaxe:
find <path> <condition> -exec cp '{}' <copy path> \;
Příklad
find -mtime -1 -type f -exec cp '{}' inner/ \;
Ve druhém příkladu je poslední část, tj. středník, také považována za součást find
příkaz, který by měl být ukončen před stisknutím tlačítka enter. V opačném případě se zobrazí chyba podobná této
find: missing argument to `-exec'
Ve vašem případě je syntaxe příkazu kopírování chybná za účelem zkopírování nalezeného souboru do /home/shantanu/tosend
. Následující příkaz bude fungovat:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;