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 finduygulamanız standart dışı -mindepth/ -maxdepthtahminleri 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, fishveya (yerine bir hata rapor verecek) Thompson kabuğu. Burada, bunun -cetrafında çalışmak için kullanıyoruz , ancak yine de adlı touchbir dizin olmayan dosya olabilir *.İle zshe touchdizinlere sadece, gizli olanlar dahil:
touch -- *(D/)
{} \+Özel findsözdizimi - daha man sayfalarını okumalı. Bence touch -c ./*/de işe yarayacaktır.
-maxdepth 1Komuta eklemeniz gerekir , böylece findalt 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 fordosya 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-createGNU 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 dotglobkabuk seçeneğini etkinleştirmektir shopt -s dotglob.