KSH сортировать имена файлов

Я ищу в директориях "searchstring", а затем запускаю скрипт для каждого файла $:

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

Мой файл $debug выдает следующее:

/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) ...

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

4 ответа

Решение

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

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

Для сортировки по времени изменения вы можете использовать stat с find:

$ найти. -exec stat {} -c '%Y %n' \; | сортировать -n | cut -d ' ' -f 2

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

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

Вы можете передать вывод команды find через sort для сортировки по имени файла:

find $dir -name "${searchstring}*" | sort | while read file
do
    echo "$file" >> $debug
    script.sh "$file" >> $output    
done
Другие вопросы по тегам