"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 xargskullanarak dizinleri oluşturmak için dosyaların listesini okumak için komutu mkdir.
xargsBir referans edebilen placeholder( {}birlikte) -Iiletilen 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
xargsayrıca sh -cbayrakla 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 -pyerine mkdirve 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 -pve sonra touchkendi dizininde bir dosya adı oluşturur .
İşte yukarıdaki komutta olanların bir dökümü:
Mesela benim files.txtgö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 {}, xargsher 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
fdeğişkenleri bütünüyle yeniden referans alırız touch:
touch deeply/nested/foo/bar.txt
touch deeply/nested/baz/fiz.txt