2016-08-17 3 views
0

Я только начинаю с скриптов оболочки bourne и пытаюсь написать скрипт, который будет принимать два аргумента командной строки: каталог и файл. Я хочу сравнить дату создания файла с файлами в каталоге и распечатать все старые файлы, а затем распечатать количество всех новых файлов.Возвращающийся список файлов по дате создания

Это код, который я пытался сделать до сих пор, но я знаю, что он не распознает каталог должным образом.

#!/bin/sh 

directory=$1 
file=$2 
x=0 

for f in $directory 
do 
    if [ $f -ot $file ] 
    then 
    echo "$f" 
    x='expr $x+1' 
    fi 
done 

echo "There are $x newer files" 

Любые советы будут по достоинству оценены!

+1

Шаг 1 будет убедиться, что вы используете файловую систему, которая фактически хранит дату создания файла. Большинство нет. «Ctime» - это не «время создания», а «изменение времени», и есть действия после создания, которые изменят эту метку времени. – twalberg

ответ

1

find команда предоставляет параметры поиска файлов на основе временных меток. То, что вы хотите достичь может быть сделано без использования цикла:

# Search for files with modification time newer than that of $file 
find $directory -newermm $file 

# Search for files with modification time older than that of $file 
find $directory ! -newermm $file 

Пожалуйста, обратитесь https://www.gnu.org/software/findutils/manual/html_node/find_html/Comparing-Timestamps.html для более подробной информации.

Однако, если вы изучаете сценарии оболочки и хотите, чтобы написать свой собственный сценарий, вот несколько советов:

  1. Для итерации файлов в каталоге, вы можете использовать:

    for f in "$directory"/* 
    
  2. Насколько я знаю, -ot сравнивает модификацию раз (а не время создания). В этом отношении я сомневаюсь, что Linux предоставляет время создания файлов.

  3. Приращение x (кол-во новых файлов) должно быть сделано в оговорке else. Я бы предпочел x=$((x+1)), который поддерживается во всех POSIX-совместимых оболочках.

  4. Предостережение: Итерация с использованием "$directory/* не будет возвращаться в подкаталоги. find будет возвращаться в подкаталоги, если вы не укажете опцию -maxdepth.

+0

Спасибо за кучи за это ясно для меня. Вы знаете, есть ли способ сделать то же самое, что и найти, но считать файлы, а не печатать каждый из них? – Brittany

Смежные вопросы