Yanıtlar:
Bu aradığınızı yapar:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Bunun findyerine ls, genellikle ayrıştırma lsçıktısının güvenilmez olması nedeniyle kullanır . findAncak bu form, yeni satırlar veya başka zor karakterler içermesine rağmen dosya adları ile çalışacaktır.
açıklama
find . -maxdepth 1 -type f -print0
Bu dosyaları seçer. Bu, bulgunun birçok seçeneğinden herhangi biri kullanılarak özelleştirilebilir. Seçenek , dosya adlarını boş bir listeye yazdırmayı print0bildirir find. Bu, dosya adlarının listesini ileten tek güvenilir olanıdır.
xargs -L1 -p0 chmod +x
Bu, null ile ayrılmış dosya adlarının listesini alır ve findkomutunuzu bunlara uygular.
-L1Seçenek söyler xargsbir seferde sadece bir dosya adı üzerinde çalışmaya. -pSeçenek söyler xargsdevam etmeden önce onay için istemi için. -0Seçenek söyler xargsdosya adları arasındaki ayırıcı olarak null karakteri kullanmak.
[ Kwan işaret ettiğine kadar -pseçeneğinin farkında xargsdeğildim.]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.Bundan -maxdepth 1önce -type f, as ile çalışır find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x.
Kullanabilirsiniz xargs.
Örneğin:
ls|xargs -I path -p chmod +x path
Seçenek -p: Kullanıcıdan her komut satırını çalıştırıp çalıştırmamasını isteyin ve terminalden bir satır okuyun. Komut satırını yalnızca yanıt 'y' veya 'Y' ile başlıyorsa çalıştırın.
xargs -po kadar çok seviyorum ki kopyalayacağım.
touch "a very long file nameyazıp enter tuşuna basın. Satırın devamına bakın ve sadece kapanış teklifini yazın ve tekrar enter tuşuna basın. tadaa, dosya adındaki newline. Tembelliğin dışında uzun bir dosya adı yeniden yazın.
findPOSIX komutunu kullanarak uyumlu hale getirebilirsiniz-exec printf '%s\0' {} +. Her şeyi POSIX ile uyumlu hale getirmenin bir yolu olduğunu düşünmeyin.