Найдите самый новый файл и посмотрите, старше ли файл, чем дата "X"

Как упоминается в других ответах, ls изменяет свой вывод в зависимости от того, является ли его стандартный вывод терминалом или нет.

ls -C

заставляет ls использовать вывод в виде столбцов, но по умолчанию форматирует строки так, чтобы они помещались в 80 столбцов. Если вы хотите получить вывод, соответствующий результатам, которые вы получаете в своем терминале, вам необходимо экспортировать переменную COLUMNS :

export COLUMNS
ls -C > output

или, если вы хотите указать только COLUMNS для ] ls :

COLUMNS=$COLUMNS ls -C > output

(предполагается, что ваша оболочка знает текущую ширину терминала и делает ее доступной в самой переменной COLUMNS ).

2
20.01.2017, 20:40
2 ответа

Вот версия bash .

#!/bin/bash
maildir='/u1/?/*/Maildir/new'
DAYS_OLD=180

for d in $maildir ; do
    if [ -d "$d" ] ; then
        FILE="$d/"$(ls "$d" -t1  | head -n 1)
        echo $FILE
        if test $(find "$FILE" -mtime +$DAYS_OLD) ; then
            echo $FILE >> OLDER.txt
        else
            echo $FILE >> YOUNGER.txt
        fi
    fi
done
0
27.01.2020, 22:03

bash - не лучшая оболочка для этого.

С помощью zsh :

#! /bin/zsh -
period=${1?Period not given}
for d (/u1/?/*/Maildir/new) {
  newest=($d/*(DN.om[1]))
  (($#newest)) || continue

  over=($newest(Nm+$period))
  if (($#over)); then
    ls -ld $newest >> OLDER.txt
  else
    ls -ld $newest >> YOUNGER.txt
  fi
}
3
27.01.2020, 22:03

Теги

Похожие вопросы