毎日のダウンロードはディレクトリに保存されます。
このフォルダ内のファイル数を数えるスクリプトが作成されました。
私が心配しているのは、7つ以上のファイルがある場合は、ディレクトリから最も古いファイルを削除することです。
どうすればいいですか?
# If I tared it up would the target exist
tar_file=$FTP_DIR/`basename $newest`.tar
if [-s "$tar_file" ]
then
echo Files Found
else
echo No files
fi
# tar it up
tar -cf tar_file.tar $newest
# how many tar files do I now have
fc=$(ls | wc -l)
echo $fc
# If more than 7 delete the oldest ones
答え1
私はこれが古い質問であることを知っています。しかし、他の人が必要な場合に備えて、ここに到着して共有しました。
#!/bin/bash
FTP_DIR=/var/lib/ftp # change to location of dir
FILESTOKEEP=7
ls -1t $FTP_DIR/*.tar | awk -v FILESTOKEEP=$FILESTOKEEP '{if (NR>FILESTOKEEP) print $0}' | xargs rm
デフォルトでは、すべてのファイルを1つの列にリストし、-1
変更時間に基づいて最新のファイルからソートします。-t
次に、Iを使用してawk
指定されたファイル数にvarを設定し、その数$FILESTOKEEP
より大きいレコードを印刷します。
各出力ラインで実行されるxargs
結果を渡します。rm
awk
ls
ワイルドカードを使用すると拡張パスが強制的に印刷されるため、ファイルが保存されているフォルダ内でスクリプトが呼び出されない場合は、この方法が機能します。
答え2
tarファイルを削除しようとしているのか、$newestファイルを削除しようとしているのかわかりません。ただし、単一のディレクトリにある通常のファイルの場合:
ls -t1 $dir | tail -n +8 | while read filename; do rm "$filename"; done
a) ファイルが 7 個未満で b) ファイル名に空白 (改行を除く) がある場合は注意が必要です。
このtail
コマンドは、最初から最後の数行を取得するために正数を使用できます。
答え3
パスワード
[vagrant@localhost ~]$ cat rm_gt_7_days
d=/tmp/test
fc=$(ls $d| wc -l)
if [ "$fc" -gt "7" ]; then
find $d/* -mtime +7 -exec rm {} \;
fi
テスト
ディレクトリとファイル
mkdir /tmp/test && \
for f in `seq 7`; do touch /tmp/test/test${f}; done && \
touch -t 201203101513 /tmp/test/test8
概要
[vagrant@localhost /]$ ll /tmp/test
total 0
-rw-r--r--. 1 root root 0 Sep 14 12:47 test1
-rw-r--r--. 1 root root 0 Sep 14 12:47 test2
-rw-r--r--. 1 root root 0 Sep 14 12:47 test3
-rw-r--r--. 1 root root 0 Sep 14 12:47 test4
-rw-r--r--. 1 root root 0 Sep 14 12:47 test5
-rw-r--r--. 1 root root 0 Sep 14 12:47 test6
-rw-r--r--. 1 root root 0 Sep 14 12:47 test7
-rw-r--r--. 1 root root 0 Mar 10 2012 test8
スクリプトの実行と結果
[vagrant@localhost ~]$ sh rm_gt_7_days
[vagrant@localhost ~]$ ll /tmp/test
total 0
-rw-r--r--. 1 root root 0 Sep 14 12:47 test1
-rw-r--r--. 1 root root 0 Sep 14 12:47 test2
-rw-r--r--. 1 root root 0 Sep 14 12:47 test3
-rw-r--r--. 1 root root 0 Sep 14 12:47 test4
-rw-r--r--. 1 root root 0 Sep 14 12:47 test5
-rw-r--r--. 1 root root 0 Sep 14 12:47 test6
-rw-r--r--. 1 root root 0 Sep 14 12:47 test7
源泉
- https://askubuntu.com/questions/62492/how-can-i-change-the-date-modified-created-of-a-file
- http://www.dreamsyssoft.com/unix-shell-scripting/ifelse-tutorial.php
- http://www.howtogeek.com/howto/ubuntu/delete-files-older-than-x-days-on-linux/
- http://www.cyberciti.biz/tips/how-to-generate-print-range-sequence-of-numbers.html
答え4
if [ $file_count -gt 7 ]
rm `/bin/ls -rt | head -1`
fi