このプログラムは毎日実行する必要があるため、ファイルが欠落したり追加されたりした場合に、それらすべてのリストを取得できます。
可能な方法をいくつか提案してください。
このプログラムは毎日実行する必要があるため、ファイルが欠落したり追加されたりした場合に、それらすべてのリストを取得できます。
可能な方法をいくつか提案してください。
ここに、必要なことを実行する小さなスクリプトがあります。それは汚れていて、ほとんどチェックがありませんが、あなたが望むことをします:
#!/bin/bash
# Directory you want to watch
WATCHDIR=~/code
# Name of the file that will keep the list of the files when you last checked it
LAST=$WATCHDIR/last.log
# Name of the file that will keep the list of the files you are checking now
CURRENT=/tmp/last.log
# The first time we create the log file
touch $LAST
find $WATCHDIR -type f > $CURRENT
diff $LAST $CURRENT > /dev/null 2>&1
# If there is no difference exit
if [ $? -eq 0 ]
then
echo "No changes"
else
# Else, list the files that changed
echo "List of new files"
diff $LAST $CURRENT | grep '^>'
echo "List of files removed"
diff $LAST $CURRENT | grep '^<'
# Lastly, move CURRENT to LAST
mv $CURRENT $LAST
fi
date
ディレクトリ内のすべてのファイルの生成時刻を現在の出力と照合して、過去 24 時間以内に作成されたかどうかを確認する毎日の cron ジョブをセットアップできます。
current=$(date +%s)
for f in *; do
birth=$(stat -c %W "$f")
if [ $((current-birth)) -lt 86400 ]; then
echo "$f" >> new_files
fi
done
私の最初の素朴なアプローチは、隠しファイルを使用してファイルのリストを追跡することです。
ディレクトリの先頭に 3 つのファイルが含まれているとします。
a
b
c
リストを隠しファイルに保存します。
ls > .trackedfiles
ファイルd
が追加されます。
$ ls
a b c d
以前の状態を保存し、新しい状態を記録します。
mv .trackedfiles .previousfiles
ls > .trackedfiles
違いを表示するには、diff を使用できます。
$ diff .previousfiles .trackedfiles
3a4
> d
差分は、d が正しいファイルにのみあることを示しています。
ファイルが追加および削除された場合、diff は次のように表示されます。
$ diff .previousfiles .trackedfiles
2d1
< b
3a3
> d
ここで、b
が削除され、d
追加されました。
これで、出力の行を grep して、追加または削除されたファイルを特定できます。
ls
ファイルのリストが常に同じ順序になるように、上記の出力をソートすることをお勧めします。ls | sort > .trackedfiles
(代わりに単に書くだけです。)
このアプローチの欠点の 1 つは、隠しファイルがカバーされないことです。これは、a) 隠しファイルも一覧表示し、b) 追跡ファイルをプロセスから除外することで解決できます。
別の回答で述べたように、スクリプトはcronジョブによって定期的に実行できます。
それを実装する多くの方法..疑似コード:
ls -ltrh | wc -l
現在のディレクトリ内のファイル/フォルダーの数を示します
毎日/要件に応じて数を確認し、値を比較します。毎日実行する必要があるため、シェルスクリプトをcronjobに入れます