IFS=$(echo -en "\n\b")
Bir kabuk olduğunu varsaydığınız echo -eve yine de shebang hattınızda bash yaptığınız için kullanabilirsiniz IFS=$'\n\b'. Geri tuşu ayırıcı yapmak oldukça tuhaf. IFSZaten yaptığın şeye ihtiyacın yok .
OLDIFS=$IFS
...
IFS=$OLDIFS
Bunun IFSyalnızca IFSbaşlangıçta ayarlanmışsa eski değerini geri yüklediğini unutmayın . Eğer IFS, bu setler başlangıçta tanımsız oldu IFStamamen farklı boş bir dize, için. Ksh, bash veya zsh'de, IFSgeçici olarak ayarlamanız gerekirse , kodunuzu bir işleve yazabilir ve IFSbu işleve yerel yapabilirsiniz . Diğer mermilerde, ayarlanmamış kasaya dikkat etmelisiniz.
`find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"`
Çıkışında komut yerine kullanmayın find.
- Bu, çıktıyı içindeki karakterlere böler
$IFS. Yeni IFSbir satıra ayarlarsanız , çıkış yeni satırlara ayrılır, ancak yeni satır içeren dosya adlarını işleyemezsiniz.
- Komut ikamesinin sonucu kelimelere bölünmekle kalmaz, aynı zamanda her kelime bir glob paterni olarak kullanılır. Aradığınız bulunursa
A[12].pdf, A1.pdfve A2.pdf, sen ile bitireceğiz A1.pdf A2.pdf A1.pdf A2.pdf. Globbing'i ile kapatabilirsiniz set -f(ve tekrar açabilirsiniz set +f), ancak burada (çoğu zaman olduğu gibi) doğru yol komut yerine koymayı kullanmamaktır.
Kullanım -execiçin argüman find(sistem varsa ya -print0kullanabileceğiniz find … -print0 | xargs -0 …yerine, bu sahip olduğunuz eski Linux sistemleri veya geçerli OpenBSD sistemlerine taşınabilirlik gerekiyorsa Aynı anda birden fazla dosya üzerinde işlem yapılması yararlıdır -print0ama -exec … {} +).
ORIGTS=`stat -c "%Y" $f`
# [transform $f]
touch -t $ORIGTS $f
Etrafta çift tırnak işareti eksik olduğunu unutmayın $f(bunlar bölme sonuçlarıysa ve o IFSzamandan beri değişmediyseniz buna gerek yoktur ve globbing kapalıdır, ancak gerçekten, neden yapabileceğinizi bilmiyorsanız her zaman çift tırnak işareti koyun ' Onları açık bırakmayın).
Bu beceriksiz ve taşınabilir statdeğildir ( tüm sistemlerde mevcut değildir ve argümanları var olduğu farklı sistemlerde farklıdır). touchBaşka bir dosyanın zaman damgasına bir dosyayı ayarlamak için taşınabilir bir seçeneği vardır: touch -r REFERENCE_FILE FILE. Bunun yerine iki yaklaşımdan birini öneriyorum:
- Yapabiliyorsanız, önce orijinal dosyayı yeni bir dosyaya dönüştürün, ardından yeni dosyanın
touch -rtarihini ayarlamak için arayın ve son olarak yeni dosyayı yerine taşıyın. Girdiye bir şey gelmeden önce çıktının iyi olduğundan emin olmak daha iyidir; aksi halde, dönüşüm herhangi bir nedenle kesilirse (örn. elektrik kesintisi), veri kaybedersiniz.
- Dönüşüm üzerinde kontrol sahibi olmadığınız bir kara kutu ise,
touch -riki kez kullanabilirsiniz : orijinal dosyanın tarihini boş bir geçici dosyaya (otomatik olarak oluşturulacak) kaydetmek için bir kez, daha sonra tarihi geri yüklemek için dönüşümden sonra tekrar geçici dosyayı kullanarak.
Böylece:
find /mnt/library/Libra/Libra/Ashfords -name '*.pdf' \
-exec sh -c 'transform "$0" to "$0.tmp" && touch -r "$0" "$0.tmp" && mv -f "$0.tmp" "$0"' {} \;
IFSolağandışı görünüyor. Gerçekten backspace (\b) üzerinde bölmek istediniz mi ? Bazı ipuçları için unix.stackexchange.com/questions/9496/… adresine bakın .