A. Я использовал следующий код, чтобы получить дату изменения файла. Но при этом также выбираются подкаталоги и, таким образом, возвращается ошибка. Как я могу это исправить?
for file in $1/*; do
echo `stat -c %y $file | cut -d ' ' -f1`
done
$ 1
- это каталог, который я передаю.
Б. Также есть способ сделать это. Что мне нужно передать каталог и диапазон дат в качестве аргумента командной строки и указать файл и дату изменения, которая находится в этом диапазоне дат.
Например, output.sh / home / user / desktop 2014-10-07 2014-11-17
должен перечислить все файлы в этом каталоге, которые были изменены за этот интервал времени.
Относительно части A Вашего вопроса вот ссылка к стандартным тестам файла.
, В частности, то, что можно сделать:
for file in $1/*; do
[ ! -d "$file" ] && echo `stat -c %y $file | cut -d ' ' -f1`
done
Что касается части B, см. этот stackoverflow вопрос.
Для части A, более эффективного подхода:
find $1 -maxdepth 1 ! -type d -exec stat -c "%y" {} + | cut -d' ' -f1
find
превосходно при отфильтровывании на основе типа, и exec
с +
должен выполнить гораздо меньше stat
процесс. При передаче по каналу целого вывода к cut
средства мы должны работать cut
только однажды. И нет действительно никакой потребности сделать
echo `some command`
, единственное преимущество преобразовывает многострочный вывод в одну строку, которая не применима к Вашему случаю так или иначе.