"Sahte yapmak" mümkündür.
İlk olarak, bazı gerekli teori:
Rob Griffiths başlıklı 2007 yılında bir makale yayınlanmıştır Kolayca Yeni Klasörlerin sürü oluşturma o kullanarak tartışılan burada Macworld.com üzerinde xargs
kullanarak dizinleri oluşturmak için dosyaların listesini okumak için komutu mkdir
.
xargs
Bir referans edebilen placeholder
( {}
birlikte) -I
iletilen her bir değişken için değeri içeren bayrak xargs
. İşte o bayrakla olan ve olmayan arasındaki fark:
$ foo.txt bar.txt | xargs echo
$ => foo.txt bar.txt
$ foo.txt bar.txt | xargs -I {} echo {}
$ => foo.txt
$ => bar.txt
xargs
ayrıca sh -c
bayrakla rasgele kabuk komutları çalıştırabilir :
foo.txt bar.txt | xargs sh -c 'echo arbitrary command!'
Kavramları Birleştirmek:
Biz bu kavramları birleştirebilirsiniz mkdir -p
yerine mkdir
ve de konsept @ldx 'ın cevabı bu üretmeye:
$ cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
Bu komut, temelde her bir dosya adını satırdan ayrılmış bir dosya listesinde eşler, dosya bölümünü keser, dizinleri oluşturur mkdir -p
ve sonra touch
kendi dizininde bir dosya adı oluşturur .
İşte yukarıdaki komutta olanların bir dökümü:
Mesela benim files.txt
görünüşüm şöyle diyor:
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
cat files.txt
üretir deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
borulu xargs
- kullandığımız için
-I {}
, xargs
her bir argümanı kendi emrine çeviririz, bu yüzden şimdi elimizde:
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
- daha sonra
&&
sırayla çalışan 3 komutu gruplamak için birleştirici kullanan bir kabuk komutu çalıştırıyoruz - ilk komut, daha önce kaydettiğimiz yer tutucuyu kullanarak dosyayı bir ortam değişkeninde (bir sonraki dosya geçişinde yeniden kullanılan) depolar, bu yüzden şimdi var:
f=deeply/nested/foo/bar.txt
f=deeply/nested/baz/fiz.txt
- Şimdi geçebileceğimiz bir değişkenimiz var
mkdir -p
, ancak dosya adını kesmemiz gerekiyor. Kullanması yeterince basit '${f%/*}'
:
mkdir -p deeply/nested/foo/
mkdir -p deeply/nested/baz/
- ve sonra biz sadece
f
değişkenleri bütünüyle yeniden referans alırız touch
:
touch deeply/nested/foo/bar.txt
touch deeply/nested/baz/fiz.txt