Bash betiği - Dosya yazma işlemi tamamlanıncaya kadar cp komutunu geciktir


1
cp /Folder1/*.mov /Folder2/
cp /Folder1/*.mov /Folder3
rm /Folder1/*.mov

Bu, herhangi bir * .mov dosyasını bir klasörden diğer 2 klasöre kopyalayan Chron'u kullanarak her 60 saniyede bir çalışır ve ardından dosyayı kaldırır.

Dosyanın yazılması 60 saniyeden uzun sürerse, komut dosyasını çalıştırır ve klasördeki herhangi bir şeyi kopyalar ve bozar. (Ya da sadece bir dosya yazılırken script sadece çalıştırılırsa)

Dosya yazma işlemi tamamlanana kadar betiği bekletmek için koşullu bir ifade nasıl yapabilirim?


Belki yerine klasör eylemleri kullanın? Örneğin: simplehelp.net/2007/01/30/… Automator.app
Mateusz Szlosek

Dosyaları aynı dosya sistemine mi kopyalıyorsunuz?
fd0

1
Cp yerine rsync kullanırdım (veya sadece mv)
Mark

Bu, dış istemcilerin projelerin önizleme işlemlerini görüntülemesini sağlamak için kullandığımız bir sistemin parçasıdır. Buradaki fikir bir * .mov dosyasını bu klasöre bıraktığımız ve Adobe Media Encoder'in izlediği başka bir klasöre kopyalayıp daha küçük bir dosyayı otomatik olarak kodladığı ve ardından istemcilerin önizlemesi için bu dosyayı bir Dropbox klasörüne kopyaladığıdır.
Brian

Aynı dosya sistemi, Ive Automator kullanmaya çalıştı ama çok şanssız ...
Brian

Yanıtlar:


2

Dosyayı Kilitle

Devam eden kopyayı not etmek için bir kilit oluşturmayı düşünün, bkz . Komut dosyanızı kilitleyin (paralel çalışmaya karşı) :

#!/bin/sh

# Path to a lock folder
LOCK_PATH="/tmp/copying.lock"

# Ensure the lock is removed should the copy fail
trap 'rmdir "/tmp/copying.lock"; exit' 1 6 15

if mkdir "$LOCK_PATH"; then
    # Lock file did not exist and was created

    # Perform commands
    cp /Folder1/*.mov /Folder2/
    cp /Folder1/*.mov /Folder3
    rm /Folder1/*.mov   

    # Remove the lock
    rmdir "$LOCK_PATH"
fi

Yukarıdaki komut dosyası yalnızca, klasörde yoksa kopyalanır /tmp/copying.lock.

Kopyala ve Taşı

Doğrudan son konuma kopyalamak yerine, kopyayı geçici bir konuma getirmeyi düşünün. Ardından dosyaları taşıyın. Bir hamle hızlıdır, atomik olma eğilimindedir ve dosyalara zarar verme olasılığı daha düşüktür.

Alternatif olarak, rsyncbu sorunlara karşı korunmaya yardımcı olmak için bayraklar içeren bir araç kullanarak da kopyalayabilirsiniz .


1
Komut dosyasında bir tuzak eksik veya anormal biçimde çıkarsa komut dosyası kilitlenebilir. Gibi bir şeytrap 'rmdir /tmp/copy.lock; exit' 1 6 15
fd0

Teşekkürler @ fd0. Lütfen satır düzenlemek ve eklemek için çekinmeyin.
Graham Miln

Buna bir şans vereceğim ve birazdan rapor edeceğim. Teşekkür ederim Graham, fd0 ve yardım eden diğer kişiler! İşte gidiyor!
Brian

Hey millet, bunu denedim ama yanlış bir şey yapıyorum olabilir. Dizinde / tmp / klasörünü el ile oluşturmadığım sürece, sahip olduğum şekilde çalışmaz.
Brian,

1
Elbette, sorun değil, kodlama ve istifleme işlemlerinde oldukça yeni ...
Brian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.