ile mv dosyaları | xargs


18

Ben sadece / etc / apache / sites-etkin klasörden / etc / apache / sites-available klasörüne aşağıdaki dosyaları bir sürü (semboller değil) taşımak için çalışıyorum:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

ama ben bir ubuntu n00b ve bu hatayı alıyorum:

mv: target `./real-file' is not a directory

Burada 'gerçek dosya' geliştirici ortamımda kurduğum bir test dosyası. Bir üretim sunucusunda başkasının karışıklığını düzeltmeye çalışıyorum ;-)

Yanıtlar:


27

-execSeçeneği findkomutla deneyebilirsiniz ,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Kökün sahip olduğu dosyaları taşımak için sudoizinlere ihtiyacınız vardır .

xargsKomutu kullanmak istiyorsanız -I, ona seçenek ekleyin .

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/

7

İdeal olarak find ile -print0 kullanmalısınız, bu nedenle boşluklu dosya adları işleri bozmaz.

Örneğin;

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory

0

aynı şeyi ancak ekstra bir performansla gerçekleştirmek için başka bir yol da kullanabilirsiniz :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Bunun \+, find komutunun çıktıyı alması ve {}istediğinizi yapması için genişlemesi anlamına geldiğini unutmayın, bu şekilde iki seçeneği önlersiniz ( \;= her giriş için VE yeni bir komuta borulama xargs)

İşte açıklama (kılavuzu da kontrol edebilirsiniz man find)

-exec komutu {} + -exec eyleminin bu değişkeni, seçilen dosyalarda belirtilen komutu çalıştırır, ancak komut satırı, seçilen her dosya adı sonuna eklenerek oluşturulur; komutun toplam çağrı sayısı, eşleşen dosya sayısından çok daha az olacaktır. Komut satırı, xargs'ın komut satırlarını oluşturduğu gibi oluşturulur. Komutta yalnızca bir {{} örneğine izin verilir. Komut başlangıç ​​dizininde yürütülür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.