Yanıtlar:
Bu aradığınızı yapar:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Bunun find
yerine ls
, genellikle ayrıştırma ls
çıktısının güvenilmez olması nedeniyle kullanır . find
Ancak 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ı print0
bildirir 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 find
komutunuzu bunlara uygular.
-L1
Seçenek söyler xargs
bir seferde sadece bir dosya adı üzerinde çalışmaya. -p
Seçenek söyler xargs
devam etmeden önce onay için istemi için. -0
Seçenek söyler xargs
dosya adları arasındaki ayırıcı olarak null karakteri kullanmak.
[ Kwan işaret ettiğine kadar -p
seçeneğinin farkında xargs
değ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 -p
o kadar çok seviyorum ki kopyalayacağım.
touch "a very long file name
yazı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.
find
POSIX komutunu kullanarak uyumlu hale getirebilirsiniz-exec printf '%s\0' {} +
. Her şeyi POSIX ile uyumlu hale getirmenin bir yolu olduğunu düşünmeyin.