Bunu kullanarak cwd tüm klasörlerin zaman damgalarını güncelleştirmeye çalışıyorum:
for file in `ls`; do touch $file; done
Ama işe yaramıyor gibi görünüyor. Neden herhangi bir fikir?
Bunu kullanarak cwd tüm klasörlerin zaman damgalarını güncelleştirmeye çalışıyorum:
for file in `ls`; do touch $file; done
Ama işe yaramıyor gibi görünüyor. Neden herhangi bir fikir?
Yanıtlar:
Şimdiye kadar olan tüm yanıtlar (ve sorudaki örneğiniz gibi) touch
, "tüm klasörlere dokunun" demiş olsanız bile, dizindeki her şeyi istediğinizi varsayar . Dizinin dosya ve klasör içerdiği ortaya çıkarsa ve yalnızca klasörleri güncellemek istiyorsanız şunları kullanabilirsiniz find
:
$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +
Veya find
uygulamanız standart dışı -mindepth
/ -maxdepth
tahminleri desteklemiyorsa:
$ find . ! -name . -prune -type d -exec touch {} +
Bu:
$ touch -c -- */
Bunun dışında çoğu kabukta çalışmalıdır:
touch
dizinlerle de bağlantı kuracaktır*
dışındaki kabuklarda csh
, tcsh
, zsh
, fish
veya (yerine bir hata rapor verecek) Thompson kabuğu. Burada, bunun -c
etrafında çalışmak için kullanıyoruz , ancak yine de adlı touch
bir dizin olmayan dosya olabilir *
.İle zsh
e touch
dizinlere sadece, gizli olanlar dahil:
touch -- *(D/)
{} \+
Özel find
sözdizimi - daha man sayfalarını okumalı. Bence touch -c ./*/
de işe yarayacaktır.
-maxdepth 1
Komuta eklemeniz gerekir , böylece find
alt klasörlere geri dönmez. OP, alt klasörlere değil, yalnızca cwd'deki klasörlere dokunmak istiyor gibi görünüyor.
Deneyin
touch ./*
Her for
dosya için yeni bir işlem oluşturacak gereksiz döngüden kaçınır ve boşluklu veya seçenek gibi görünen tüm dosya adları için çalışır (örneğin -t
). Çalışmayacağı tek zaman dizinde (nokta olmayan) dosya yoksa, bu durumda adında bir dosya oluşturursunuz *
. Bundan kaçınmak için, touch
çoğu uygulamada belirli bir durumda -c
( --no-create
GNU sürümlerinde de denir ) varolmayan dosyalar oluşturma seçeneği vardır, yani
touch -c ./*
Ayrıca iyi referanslara bakınız jasonwryan cevabı yanı sıra bu bir .
Sen çıktısını ayrıştırmak için çalışmamalıdırls
.
Ayrıca, "$file"
herhangi bir boşluk yakalamak için teklif gerekir . Bkz. Http://www.grymoire.com/Unix/Quote.html
Böyle bir şey peşinde olduğunuz şeyi başarabilir:
for file in *; do touch "$file"; done
Daha ayrıntılı bir açıklama için ilk iki Bash Tuzağına bakın.
*
Adının bir nokta ile başlayan dosyaları ve dizinleri yakalamadığını unutmayın . Bunu düzeltmenin bir yolu da dotglob
kabuk seçeneğini etkinleştirmektir shopt -s dotglob
.