2015-03-11 4 views
0

Я пытаюсь создать простой скрипт, который просматривает дерево каталогов, ища файлы с именем «plot.plt», изменяет их маршрут и запускает gnuplot внутри этого каталога (потому что в противном случае он выдает ошибку).Найти все файлы, соответствующие названию, и перейти на их маршрут

Я попытался это до сих пор:

find . -type f -name "*.plt" -printf "%h\n" | xargs -i cd "{}" 

Но мне подсказывает, что каталог не существует.

Заранее спасибо.

+0

'cd' - это встроенная оболочка,' xargs' не использует оболочку для выполнения своих команд. И даже если бы это было так, это было бы в подпроцессе, поэтому это не повлияет на вашу исходную оболочку. – Barmar

+0

Что вы подразумеваете под _change на свой маршрут_? Похоже, вы имеете в виду _change к его содержащему директорию_. – Barmar

+0

Да, извините. он содержит каталог, поэтому я могу выполнить gnuplot внутри, затем скопировать результирующее изображение в папку и cd в исходный рабочий каталог. – Urco

ответ

0

Вы должны выполнить явно bash, так как xargs не запускает оболочку. В вызове оболочки вам необходимо выполнить как cd, так и gnuplot, поскольку изменения каталога не влияют на родительский процесс.

find . -type f -name '*.plt' -printf '%h\n' | xargs -i bash -c 'cd "$0"; gnuplot' {} 
0

Если вы хорошо с небольшим дополнительным скрипт (вы можете также использовать в качестве псевдонима), вы можете сделать

find . -iname "*.plt" -exec ./gnuplotcd {} \;

файл gnuplotcd, содержащий

#!/bin/bash 
cd `dirname $1` 
gnuplot `basename $1` 

Dont забудьте chmod +x gnuplotcd.

Смежные вопросы