Сценарий оболочки - найдите измененные сегодня файлы, создайте каталог и переместите их туда - PullRequest
3 голосов
/ 30 августа 2011

Мне было интересно, есть ли простой и лаконичный способ написания сценария оболочки, который будет проходить через серию каталогов (, т. Е. , по одному на каждого учащегося в классе), определить, находится ли внутри этогоВ каталоге есть любые файлы, которые были изменены в течение последнего дня, и только в этом случае скрипт создаст подкаталог и скопирует туда файлы.Таким образом, если в каталоге не было файлов, измененных за последние 24 часа, он остался бы нетронутым.Моя первоначальная мысль заключалась в следующем:

#!/bin/sh
cd /path/people/ #this directory has multiple subdirectories

for i in `ls`
do
   if find ./$i -mtime -1  -type f  then 
     mkdir ./$i/updated_files
     #code to copy the files to the newly created directory
   fi
done

Однако создается впечатление, что создается / updated_files для всех подкаталогов, а не только для тех, которые недавно изменили файлы.

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Более тяжелое использование find, вероятно, значительно облегчит вашу работу.Что-то вроде

find /path/people -mtime -1 -type f -printf "mkdir --parents %h/updated_files\n" | sort | uniq | sh 
1 голос
/ 30 августа 2011

Проблема в том, что вы предполагаете, что команда find не будет выполнена, если она ничего не найдет. Код выхода равен нулю (успех), даже если он не находит ничего, что соответствует.

Что-то вроде

UPDATEDFILES=`find ./$i -mtime -1  -type f`
[ -z "$UPDATEDFILES" ] && continue
mkdir ...
cp ...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...