задача : Создать скрипт, который будет принимать 2 аргумента:
3.sh <directory> <destination>
Искать файлы в <directory>
для подстроки moveme ”В содержании файла
Переместить те файлы, которые содержат строку в каталог <destination>
Мой баш :
#!/bin/bash
if [ "$1" == "" ]; then
echo "Retry..."
else
if [ "$2" == "" ]; then
echo "Retry ..."
else
echo "Try to fiend in folder {$1} files with this content {123} "
grep -l "123" $1/*
#grep -c "123" $1/*
fi
fi
Вопрос : Как перенести файл поиска из одного каталога в другой?
mv $directory/$file $destination/$file
?Ответы:
grep
вернет список файлов. Вам нужно выполнитьmv
по каждому из файлов.Ты можешь использовать
xargs
как предложено в другом ответе, но я предпочитаю это на вкладыше:Перебирает список файлов, возвращаемых
grep
и перемещает их один за другим.Возможно, вам понадобится добавить проверку ошибок, поэтому вот более читаемая версия:
Кроме того, я считаю, что обычно хорошей идеей является изменение переменной IFS перед циклом такого типа
Таким образом, вы избежите многих проблем с файлами, в имени которых есть пробел (если в них не вставлен символ новой строки).
источник
grep
& Л; п & GT; раз иmv
& Lt; м & GT; раз. Циклические вызовыgrep
только однажды.find
И его-exec
возможностей. Кроме того, вы должны заключить в кавычки ваши переменные.На самом деле, чтобы проверить нет. аргументов, проверка $ 2 достаточно
Что еще более важно, вы должны обработать возможные перезаписи файлов в $ 2.
источник
find
вxargs
использоватьfind … -print0 | xargs -0
источник