Yanıtlar:
F1'in hemen üzerindeki dizinden şu komut dosyasını çalıştırın:
Komut dosyasının amacı, fotoğraf dizinleri altında yedekli fotoğraf dizinlerinin oluşturulmasından kaçınmaktır.
Ayrıca, kullanıcının kök dizini gibi yanlış bir konumdan yanlışlıkla çalıştırılmasını önlemek için tasarlanırken, F1dizini görmez ve yanlışlıkla yanlış saraylarda yüzlerce fotoğraf dizini oluşturur.
Ayrıca, kullanıcının onu özelleştirebilmesi için betiği takip etmeyi kolaylaştırmak niyetimdi.
#!/bin/bash
while IFS= read -r -d '' i;
do
if [[ ! -d $i/Photo ]]; then
# Filter to skip folders named Photo
thisfolder="$(echo $i | sed "s/.*\///")"
if [[ ! $thisfolder == "Photo" ]]; then
mkdir "$i/Photo"
fi
fi
done < <(find F1 -type d -print0)
Komut Dosyası Güncellendi:
piçinde photobüyük harfe.lsayrıştırılmaz. Sadece kullanıcıya geri bildirim ... ne olduğunu gösteriyor. Tıpkı "Bu bir fotoğraf dizini" sözcükleri gibi. Kullanıcının neden orada bir dizin oluşturmadığını bilmesini sağlar.
find -type d F1, olabilir?
$i/Photo, ancak OP'nin bu durumda ne yapılması gerektiğini belirtmediğini unutmayın. Kuşkusuz, $is'den birinin yeni satır içerdiği kabul edilemez durumda da başarısız olacaktır .
Bunu tek bir findçağrı kullanarak başarabilirsiniz .
find . -name 'Photo' -prune -o -type d -exec mkdir {}/Photo \;
Parça -name 'Photo' -prune -o, var olan (ve yeni oluşturulan) Photodizinleri tekrarlamamayı söyler : Bulunan dosya (veya dizin) adı varsa Photo, işlemeyi durdurun ( -prune). Diğer durumda ( -o), directories ( -type d) ile devam edin -execve komutu ( ) yürütün .
-prune? :) Evet, oldukça sezgisel ama öğrenmeye değer.
-type dile birlikte -name 'Photo'önce -prune.
finddiğer klasörlerle devam edecek (eğer isterseniz, o klasörün alt klasörleri dahil).
Bunun yerine findsonuçları aktarabilirsiniz çünkü dosya adlarında boşluk varsa bu şekilde kırılmazwhilefor
Önce dizine cd F1, sonra şunları yapın:
find -type d | while read dir ; do mkdir "$dir"/Photo ; done
Dizin varsa, mkdiroluşturmayı reddedecektir, bu yüzden orada sorun yok ...
Dizin adlarınız yeni satırlar veya başka egzotik tuhaflıklar içeriyorsa, rasgele adlarla baş edebilecek olanı kullanın:
find -type d -print0 | while IFS= read -r -d '' dir ; do mkdir "$dir"/Photo ; done
Bu konuda yardım için @terdon'a teşekkürler :)
F1dizini ise ~user/Pictures, ana dizine geçmek ve satırı çalıştırmak, Photoalanındaki her dizine binlerce olabilecek bir dizin koyacaktır . F1Kolayca yapılan bir hatadan kaçınmak için komutanın bir parçası olarak eklemeyi düşünün . Bu şekilde yanlışlıkla yanlış yerden çalıştırılırsa, dizin oluşturmaz.
F1yerine yapmanızı öneririm , @LDJames
Python ile os.walkbunu oldukça kolay ve sadece birkaç satırda yapabilirsiniz
$ mkdir dir_one dir_two
$ mkdir dir_two/dir_three
$ python -c 'import os;[os.mkdir(r + "/Pictures") for r,d,f in os.walk(".")]'
$ tree
.
├── dir_one
│ └── Pictures
├── dir_two
│ ├── dir_three
│ │ └── Pictures
│ └── Pictures
└── Pictures
Üzerinde çalıştığımız şu komut: python -c 'import os; [os.mkdir (r + "/ Resimler") os.walk (".")]'
Burada -ctek tırnak içinde verdiğimiz komutu belirtmek için bayraklı python yorumlayıcısını çağırıyoruz . os.walk()işlevi, tüm alt dizinlerde yinelemeli olarak adım atmamızı sağlar ve her bir alt dizin için (ile temsil edilir r), os.mkdir()işlevler aracılığıyla Resimler klasörü oluştururuz . r+"/Pictures"sadece bir yol oluşturmak için alt dizin dizesini ve "/ Pictures" dizesini birleştirmek için basit bir dize manipülasyonudur
Gereksinimlerinize uyacak şekilde "/ Resimler" i "/ Fotoğraf" ile değiştirin
Eğer bash kullanıyorsanız, şunları yapabilirsiniz:
shopt -s globstar
for d in **/; do mkdir -p "$d"/Photo; done
Bu globstarseçenek **"tüm dosyalar ve 0 veya daha fazla dizin ve alt dizin" ile eşleşir. Başka bir deyişle, her şeyi yinelemeli olarak eşleştirir. /Sonunda nedeniyle, **/tüm dizinleri ve alt dizinleri (dosya) eşleşir. Bu nedenle, $dgeçerli dizindeki tüm dizinleri ve alt dizinlerini yineleyecek ve Photosher birinde dizin oluşturulacaktır.
-pBayrağı mkdiraracı:
-p, --parents
no error if existing, make parent directories as needed
Burada, sadece hedef dizin zaten varsa hata iletilerini bastırmak için kullanıyorum. Hataları görmek istiyorsanız kaldırın.
Bunun, Fotoğraf adlı Photobir dosya içeren bir hedef dizinde bir alt dizin oluşturmayacağını unutmayın . Yine de bu durumlarda ne yapılması gerektiğini belirtmediniz ve şu ana kadar gönderilen diğer yanıtların hepsinde de bu sınırlama var.