Как отсортировать файлы по измененной временной метке в unix, чтобы шеллскрипт выбирал их по одному - PullRequest
1 голос
/ 18 апреля 2019

Я пишу сценарий оболочки, который выбирает один файл за раз и обрабатывает их.Я хочу, чтобы скрипт выбирал файлы в порядке возрастания их измененного времени.

Я использовал приведенный ниже код для выбора файлов .csv с определенным шаблоном имени файла.

for file in /filepath/file*.csv
do
  #mystuff
done

Но я ожидаюскрипт для выбора файлов .csv в порядке возрастания их измененного времени.Пожалуйста, предложите.

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

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Если вы уверены, что имена файлов не содержат каких-либо «странных» символов, например, новой строки, вы можете использовать возможность сортировки ls и читать вывод с циклом while read....Это также будет работать для имен файлов, которые содержат пробелы.

ls -tr1 /filepath/file*.csv | while read -r file
do
    mystuff "$file"
done

Обратите внимание, что это решение должно быть предпочтительнее, чем
for file in $(ls -tr /filepath/file*.csv) ...
, потому что это не удастся, если у вас есть имя файла, содержащеепробел из-за расщепления слов, задействованных здесь.

0 голосов
/ 18 апреля 2019

Вы можете вернуть результаты ls -t в виде массива.(-t сортирует по измененному времени)

csvs=($(ls -t /filepath/file*.csv))

Затем примените цикл for.

for file in $csvs
do
  #mystuff
done
0 голосов
/ 18 апреля 2019

с вашей петлей "для"

for file in "`ls -tr /filepath/file*.csv`"
do
  mystuff $file 
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...