2012-01-06 1 views
1

Я ищу через несколько каталогов для «SearchString», а затем запустить скрипт на каждый $ файла:КШ рода имена файлов

for file in `find $dir -name ${searchstring}'*'`; 
do 
    echo $file >> $debug 
    script.sh $file >> $output 
done 

Мой файл $ отлаживать дает следующее:

/root/0007_searchstring/out/filename_20120105_020000.log
/root/0006_searchstring/out/filename_20120105_010000.log
/root/0005_searchstring/out/filename_20120105_013000.log
(имя файла _yyyymmdd_hhmmss.log) ...

Есть ли способ, чтобы найти заказ по имени файла или указываете ей? Должен ли я сначала найти поиск? Сделайте массив, затем отсортируйте его согласно этому question?

+0

'| сортировать -n' кажется довольно разумным для меня - при условии лет Ур 'sort' реализация поддерживает' -n' – fge

ответ

1

Если вы хотите игнорировать путь к каталогу и использовать только имя файла, то вы должны быть в состоянии использовать:

for file in `find $dir -name ${searchstring}'*' | sort --field-separator=/ --key=4`; 
+0

Спасибо, я не знал, что сортировка может это сделать. Я закончил использование 'sort -t/-k 4' –

1

'ls -t', если вам необходимо восстановить список на основе метки времени.

'sort -n', если список довольно статичен?

+0

+1 для использования «ls -t» – qbert220

0

Вы можете трубы выход найти через своего рода сортировку по имени файла:

find $dir -name "${searchstring}*" | sort | while read file 
do 
    echo "$file" >> $debug 
    script.sh "$file" >> $output  
done 
1

для сортировки по времени модификации, вы можете использовать стат с находкой:

 
$ find . -exec stat {} -c '%Y %n' \; | sort -n | cut -d ' ' -f 2