Как упоминается в других ответах, ls
изменяет свой вывод в зависимости от того, является ли его стандартный вывод терминалом или нет.
ls -C
заставляет ls
использовать вывод в виде столбцов, но по умолчанию форматирует строки так, чтобы они помещались в 80 столбцов. Если вы хотите получить вывод, соответствующий результатам, которые вы получаете в своем терминале, вам необходимо экспортировать переменную COLUMNS
:
export COLUMNS
ls -C > output
или, если вы хотите указать только COLUMNS
для ] ls
:
COLUMNS=$COLUMNS ls -C > output
(предполагается, что ваша оболочка знает текущую ширину терминала и делает ее доступной в самой переменной COLUMNS
).
Вот версия 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
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
}