2013-02-28 3 views
0

Я хочу, чтобы быть в состоянии найти файлы, которые содержат определенные строки и двигаться, что список файлов в каталог X(Linux) Найдите в файле, а затем переместите этот файл?

я могу использовать эту команду, чтобы найти файлы

find . -iname 'commaus*' | xargs grep '>24901<' -sl 

и эту команду для перемещения файлов

mv * /home/user/scripts/xslt 

Но есть ли способ объединить эти команды так, чтобы найденные файлы были перемещены.

Я видел подобное присоединился найти/действие команды, такие как

find /home/user -name property_images -ok rm -f {} \; 

но после этой структуры возвращается ошибка

find . -iname 'commaus*' | xargs grep '>24901<' -sl -ok mv {} /home/user/scripts/xslt; 
+2

принадлежит unix.stackexchange.com – Raptor

+0

Спасибо, не знал об этом сайте – Franco

ответ

2

Используйте петлю. В этом случае попробуйте:

for i in `find . -iname 'commaus*' | xargs grep '>24901<' -sl`; do mv "$i" /home/user/scripts/xslt/; done 

Очень хакерский, но он должен работать.

2

вы можете сделать это, обернув его в цикле

for i in `find /path/to/search -iname 'optionalfilename' -exec grep -H -m1 '>24901<' {} \; | awk -F: '{print $1}' 
do 
    mv $i /path/to/new/location 
done 

Это не будет работать, как ожидалось, если имена файлов содержат пробелы или двоеточия

+0

Эй Highfive! +1 для Jinx! :) – L0j1k

+1

если это не взломать, это не unix. – Eric

+0

Хахаха +1 для вас! – L0j1k

2

Также может быть в состоянии попробовать (без петли):

find . -iname 'commaus*' | grep '>24901<' -sl -ok | xargs mv -t /home/user/scripts/xslt 
Смежные вопросы