Замените строку на $ test

Нет необходимости в 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 , чтобы увидеть, какой процесс должен быть выполнен перед выполнением копирования
0
16.11.2018, 02:41
1 ответ

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 abcdcon $testen todos los archivos en o debajo del directorio actual usando findy 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.

2
28.01.2020, 02:32

Теги

Похожие вопросы