Нет необходимости в xargs
; find
может справиться с этим:
find . -mindepth 1 -type d \! -exec test -e '{}/stdout' \; -exec echo cp -r '{}' ../dir2 \;
или с современной версией find
, \ +
заставит find
выполнить xargs
-подобная вещь (или, ужас, 800 вилок!)
-mindepth 1
, чтобы исключить папку ./
, которая в противном случае была бы {{1} } скопируйте все подкаталоги. -exec
содержит параметр отладки echo
, чтобы увидеть, какой процесс должен быть выполнен перед выполнением копирования No intente poner comandos en variables (consulte, p. " ¿Cómo podemos ejecutar un comando almacenado en una variable? " ).
Su comando tiene problemas con $
porque Perl lo usa en sus variables escalares. Tendría que escapar no solo del shell, sino también de Perl(\\\$
).
Para reemplazar abcd
con $test
en todos los archivos en o debajo del directorio actual usando find
y GNU o BSD sed
, use
find. -type f \
-exec grep -qF 'abcd' {} ';' \
-exec sed -i.bak 's/abcd/$test/g' {} ';'
Esto encontrará todos los archivos regulares, probará si la cadena existe en el archivo y, si existe, la reemplazará con la cadena$test
(creando una copia de seguridad del archivo original con el sufijo.bak
).
Lo mismo, pero usando Perl:
find. -type f \
-exec grep -qF 'abcd' {} ';' \
-exec perl -pi.bak -e 's/abcd/$test/g' {} ';'
Si elimina la parte -exec grep
, obtendrá archivos de respaldo para todos los archivos, aunque es posible que no hayan contenido la cadena abcd
.