0

このプログラムは毎日実行する必要があるため、ファイルが欠落したり追加されたりした場合に、それらすべてのリストを取得できます。

可能な方法をいくつか提案してください。

4

5 に答える 5

4

ここに、必要なことを実行する小さなスクリプトがあります。それは汚れていて、ほとんどチェックがありませんが、あなたが望むことをします:

#!/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
于 2014-07-31T08:30:47.630 に答える
0

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
于 2014-07-31T08:06:05.280 に答える
0

私の最初の素朴なアプローチは、隠しファイルを使用してファイルのリストを追跡することです。

ディレクトリの先頭に 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ジョブによって定期的に実行できます。

于 2014-07-31T07:46:01.487 に答える
-1

それを実装する多くの方法..疑似コード:

ls -ltrh | wc -l  

現在のディレクトリ内のファイル/フォルダーの数を示します

毎日/要件に応じて数を確認し、値を比較します。毎日実行する必要があるため、シェルスクリプトをcronjobに入れます

于 2014-07-31T07:40:55.880 に答える