私はPythonを初めて使用するので、これで簡単な解決策が得られる可能性があります。
私の家には、この状況に関連する3台のコンピューターがあります。-ファイルサーバー(Linux)-メインPC(Windows)-ガールフレンドのMacBook Pro
私のファイルサーバーはubuntuとsambaを実行しています。Python 3.1をインストールし、3.1でコードを記述しました。
特定のパターンに従うuploadsディレクトリに特定のファイルがいつ存在するかを判断するデーモンを作成しました。そのようなファイルを見つけると、名前を変更し、別のドライブの別の場所に移動します。また、所有者、グループ、および権限を書き換えます。これはすべてうまく機能します。このプロセスは毎分実行されます。
メインのPCからファイルをコピーする場合(Windowsのフレーバーを実行している場合)、プロセスは常に機能します。(Windowsは、コピーが完了するまでファイルをロックすると思います。間違っている可能性があります。)ガールフレンドがファイルをコピーすると、コピーが完了する前にファイルが取得され、問題が発生します。(不適切な権限を持つ下線付きのバージョンのファイルが作成され、ファイルが正しい場所に配置されることがあります)ここでは、彼女のMacBookがコピー時にファイルをロックしないと推測しています。私もそこで間違っている可能性があります。
私が必要としているのは、使用中のファイル、または作成されていないファイルを除外する方法です。
参考までに、ファイルを見つけるために作成した方法は次のとおりです。
# _GetFileListing(filter)
# Description: Gets a list of relevant files based on the filter
#
# Parameters: filter - a compiled regex query
# Retruns:
# Nothing. It populates self.fileList
def _GetFileListing(self, filter):
self.fileList = []
for file in os.listdir(self.dir):
filterMatch = filter.search(file)
filepath = os.path.join(self.dir, file)
if os.path.isfile(filepath) and filterMatch != None:
self.fileList.append(filepath)
これはすべてクラス内にあることに注意してください。
ファイルを操作するために私が作成した方法は次のとおりです。
# _ArchiveFile(filepath, outpath)
# Description: Renames/Moves the file to outpath and re-writes the file permissions to the permissions used for
# the output directory. self.mask, self.group, and self.owner for the actual values.
#
# Parameters: filepath - path to the file
# outpath - path to the file to output
def _ArchiveFile(self, filepath, outpath):
dir,filename,filetype = self._SplitDirectoryAndFile(outpath)
try:
os.makedirs(dir, self.mask)
except OSError:
#Do Nothing!
dir = dir
uid = pwd.getpwnam(self.owner)[2]
gid = grp.getgrnam(self.group)[2]
#os.rename(filepath, outpath)
shutil.move(filepath, outpath)
os.chmod(outpath, self.mask)
os.chown(outpath, uid, gid)
別のドライブにファイルを移動し始めたときにos.renameが機能しなくなったように見えるため、os.renameの使用を停止しました。
ショートバージョン:現在転送中のファイルが検索で取得されないようにするにはどうすればよいですか?
あなたが提供できるかもしれないどんな助けにも前もって感謝します。