IFS=$(echo -en "\n\b")
Bir kabuk olduğunu varsaydığınız echo -e
ve 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. IFS
Zaten yaptığın şeye ihtiyacın yok .
OLDIFS=$IFS
...
IFS=$OLDIFS
Bunun IFS
yalnızca IFS
baş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 IFS
tamamen farklı boş bir dize, için. Ksh, bash veya zsh'de, IFS
geçici olarak ayarlamanız gerekirse , kodunuzu bir işleve yazabilir ve IFS
bu 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 IFS
bir 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.pdf
ve 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 -exec
için argüman find
(sistem varsa ya -print0
kullanabileceğ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 -print0
ama -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 IFS
zamandan 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 stat
değildir ( tüm sistemlerde mevcut değildir ve argümanları var olduğu farklı sistemlerde farklıdır). touch
Baş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 -r
tarihini 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 -r
iki 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"' {} \;
IFS
olağ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 .