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
findvý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 \;