特定のプロセスが15回繰り返されるたびに、プログラムはoutput.txt
という名前の出力テキストファイルを生成します。そうすると、最後のoutput.txt
が上書きされます。ただし、ファイルを保持したいので、プログラム内でファイル名を変更することはできません。
プログラムと共に、出力ディレクトリを監視し、output.txt
ファイルを別のディレクトリに移動して名前を変更するスクリプトを実行できますか?
最初にパッケージinotify-tools
をインストールします。
Sudo apt-get install inotify-tools
Bashスクリプトが役立ちます
#! /bin/bash
folder=~/Desktop/abc
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' $folder | while read file
do
mv ~/Desktop/abc/output.txt ~/Desktop/Old_abc/${cdate}-output.txt
done
このスクリプトの意味:
これは、フォルダー~/Desktop/abc
を監視するため、内部で作成されたファイルは、名前output.txt
であるファイルをディレクトリ~/Desktop/Old_abc
に移動し、日時のサフィックスを指定して名前を変更します。新しいファイルの場合、これは古いファイルを上書きしないように、このファイルが何時に作成されたかを知ることもできます
以下のスクリプトは、定義されたディレクトリ(dr1
)に表示される可能性のあるファイルを移動し、名前を変更します。 output_1.txt
、output_2.txt`などのファイル名を変更します。ターゲット名が既にディレクトリ2に存在する場合(「ブラインド」選択範囲ではなく)、スクリプトは「アクティブ」に見えるため、開始および停止できます。既存のファイルを上書きするリスクなしにいつでもスクリプトを実行できます。
出力ファイルに一意の名前を付け、定義により既存のファイルを上書きしないため、ターゲットディレクトリcanはソースディレクトリと同じになります。
rename_save.py
として保存します次のコマンドで実行します:
python3 /path/to/rename_save.py
他の(繰り返し)スクリプトの実行中
#!/usr/bin/env python3
import shutil
import os
import time
#--- set the time interval to check for new files (in seconds) below
# this interval should be smaller than the interval new files appear!
t = 1
#--- set the source directory (dr1) and target directory (dr2)
dr1 = "/path/to/source_directory"
dr2 = "/path/to/target_directory"
name = "output_"; extension = ".txt"
newname = lambda n: dr2+"/"+name+str(n)+extension
while True:
newfiles = os.listdir(dr1)
for file in newfiles:
source = dr1+"/"+file
n = 1; target = newname(n)
while os.path.exists(target):
n = n+1; target = newname(n)
shutil.move(source, target)
time.sleep(t)
パッケージをインストールしますinoticoming
Sudo apt-get install inoticoming
ラッパースクリプトの作成watch_output
:
#!/bin/bash
backup_folder="$HOME/backups"
filename="$1"
mkdir -p "$backup_folder"
if [ "$filename" == "output.txt" ]
then
echo "New or changed file \"output.txt\" in $2"
mv "$2/$filename" "$backup_folder/${filename%.*}.$(date +'%Y-%m-%d_%H:%M:%S').${filename##*.}"
fi
実行可能にする:
chmod +x <full_path_of_watch_output_script>
フォルダーの出力フォルダーを監視します。
inoticoming "$HOME/output" <full_path_of_watch_output_script> {} "$HOME/output" \;
例:
$ killall inoticoming
$ inoticoming "$HOME/output" ./watch_output {} "$HOME/output" \;
$ touch $HOME/output/output.txt
$ ls -log $HOME/backups
total 0
-rw-rw-r-- 1 0 Mai 13 14:32 output.2015-05-13_14:32:10.txt