используя find с exec - PullRequest
       31

используя find с exec

1 голос
/ 07 января 2010

Я хочу скопировать файлы, найденные с помощью find (с опцией exec cp), но я бы хотел изменить имя этих файлов - например, find ... -exec cp '{}' test_path/"test_"'{}', которое в мой test_path должно копировать все файлы, найденные с помощью find, но с префиксом ' тестовое задание'. но это не работает

Буду рад, если кто-нибудь подскажет, как это сделать.

С наилучшими пожеланиями

Ответы [ 4 ]

1 голос
/ 07 января 2010

если у вас Bash 4.0 и предполагается, что вы нашли текстовые файлы

cd /path
for file in ./**/*.txt
do
  echo cp "$file" "/test_path/test${file}"
done

из с GNU найти

find /path -type f -iname "*.txt" | while read -r -d"" FILE
do
    cp "$FILE" "test_${FILE}"
done

ИЛИ другая версия GNU find + bash

find /path -type f -name "*txt" -printf "cp '%p' '/tmp/test_%f'\n" | bash

ИЛИ этот уродливый, если у вас нет GNU find

$ find /path -name '*.txt' -type f -exec basename {} \; | xargs -I file echo cp /path/file /destination/test_file
1 голос
/ 07 января 2010
for i in `find . -name "FILES.EXT"`; do cp $i test_path/test_`basename $i`; done

Предполагается, что вы находитесь в каталоге, в котором есть файлы для копирования, и test_path является его подкаталогом.

0 голосов
/ 07 января 2010

Я бы немного разбил, вот так;

 for line in `find /tmp -type f`; do FULL=$line; name=`echo $line|rev|cut -d / -f -1|rev` ; echo cp $FULL "new/location/test_$name" ;done

Вот вывод;

cp /tmp/gcc.version new/location/test_gcc.version
cp /tmp/gcc.version2 new/location/test_gcc.version2

Естественно удалите эхо из последней части, так что это не просто эхо того, что было сделано, и запуск cp

0 голосов
/ 07 января 2010

Вы должны положить все test_path/"test_"'{}' в "" Как:

find ... -exec cp "{}" "test_path/test_{}" \;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...