Как мне найти файлы в каталоге, которые содержат определенный текст, и скопировать их в другой каталог? Я использую оболочку .ksh.
решение1
Сделайте man xargs
и посмотрите на -I
флаг.
find /path/to/directory -type f -exec grep -il "your pattern" {} \; | xargs -I % cp % /dest/dir/
Чтобы сэкономить время на ввод, поместите эту команду в скрипт оболочки:
#!/usr/bin/ksh
# Script name: locate
find /path/to/directory -type f -exec grep -il "$1" {} \; | xargs -I % cp % /dest/dir/
Для запуска введите, locate searchstring
где searchstring
находится текст, который вы ищете.
решение2
Вы можете просто сделать это из базового каталога, в котором вы хотите искать
cp $(grep -r -l "the pattern" *) target_directory
grep -r
означает возвратный-l
означает перечисление пути к файлу, а не совпадений в нем.помещение
$()
команды вокруг приведет к ее выполнению и размещению результата во внешней команде.cp возьмет список файлов и, если последний путь является каталогом, скопирует их все туда.