Ne.
cp příkaz nemá schopnost zpracovat žádný ze svých argumentů jako regulární výrazy. Dokonce ani zástupné znaky nezpracovává (nebo většina spustitelných souborů); spíše je ovládá shell.
cp test/* test2/ je ve skutečnosti rozšířen o bash a to vše cp opravdu vidí, že jeho argumenty jsou cp test/file1 test/file2 test/file3 test2/ (nebo cokoli, co je vhodné na základě skutečného obsahu test/ ).
Také si nemyslím, že váš výraz, [^\.php] , bude odpovídat tomu, co chcete (neodpovídá pouze souborům, které obsahují .php ).
Pravděpodobně se budete chtít podívat do find k odfiltrování seznamu souborů na základě regulárního výrazu a poté použijte xargs aplikujte vrácený seznam souborů na cp příkaz find (předpokládám, že find nemá vestavěný obslužný program pro kopírování souborů; tento nástroj důvěrně neznám).
Můžete zkusit:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
To říká, že se má v aktuálním adresáři rekurzivně vyhledat soubory, které v cestě neobsahují ".php" a zkopírovat je do /destination/folder/ .
Jak bylo požadováno, specifičtější rozdělení argumentů:
.- Místo pro zahájení vyhledávání – v tomto případě aktuální adresář!- Operátor "Ne", invertujte výsledek dalšího testu-iregex- Test regulárního výrazu bez rozlišení velkých a malých písmen. Dalším argumentem je výraz.".*\.php.*"- Regulární výraz odpovídající<Anything>.php<Anything>- Jakýkoli soubor, který má někde v cestě ".php". (Poznámka, včetně umístění ve složce, která obsahuje v názvu „.php“, budete potřebovat složitější výraz, aby odpovídal pouze souborům)-exec- Proveďte příkaz, pokud předchozí testy vrátí hodnotu true. Dalším argumentem je příkaz, všechny zbývající argumenty až do;jsou předány příkazu.{}je speciální argument představující název souboru.cp- Příkaz, který find` by měl běžet na každém z odpovídajících názvů cest.{}- Cesta k nalezenému souboru předaná nacpjako argument, aby věděl, jaký soubor zkopírovat/destination/folder/- argument předán docp, oznamujícícpkam má soubor zkopírovat.\;- Toto je;terminátor, který-exechledá. Escape to pomocí\aby se to váš shell nepokoušel analyzovat a místo toho to uvedl jako argument příkazu (find)
Je poměrně obtížné napsat regulární výraz, který odpovídá "řetězcům, které nemají .php ", takže místo toho řekneme find k vyhledání řetězců, které dělají obsahovat .php a poté invertujte výsledky pomocí ! .
Můžete použít několik dalších nástrojů z konzole, jako jsou grep a xargs.
ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder