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