2016-01-09 19 views
7

Ubuntu sunucumdaki 700.000 .jpg dosyasını bir dizinden diğerine taşımaya çalışıyorum.// Usr/bin:Argüman listesi çok uzun olmadan birçok dosyayı nasıl taşıyabilirim?

xargs mv * -t /var/www/html/ 

ve

echo (*.jpg|*.png|*.bmp) | xargs mv -t /var/www/html/ 

ve

echo (*.jpg) | xargs mv -t /var/www/html/ 

ve

find . -name "*.jpg" -print0 | xargs mv * ../ 

ve hepsi bana aynı hata verin: Aşağıdaki çalıştı xargs: Bağımsız değişken listesi çok uzun

Ne yapmalıyım? Lütfen bana yardım edin. Teşekkürler :)

+0

İlgili: [? Does "argüman listesi çok uzun" kısıtlama yerleşiklerini kabuk için geçerli] (https://stackoverflow.com/questions/47443380/does-argument-list-too -uzun-kısıtlama-shell-builtins için) – codeforester

cevap

13

find kullanırsanız -exec özniteliğini kullanmanızı öneririm. Yani sonuçlarınız find . -name "*.jpg" -exec mv {} /home/new/location \; olmalıdır. Ben kontrol etmek öneriyoruz Ancak

ne exec kısmını yerine find komut verir sen,: -exec ls -lrt {} \; Sen deneyebilirdim

+0

teşekkürler bu gerçekten benim için mükemmel çalıştı! : D: D çok teşekkürler !!! –

+0

@AwahHammad Aramıza hoş geldiniz! –

2

: Ayrıca

for f in *.jpg do; 
    mv -tv $f /var/www/html/ 
done 
for f in *.png do; 
    mv -tv $f /var/www/html/ 
done 
for f in *.bmp do; 
    mv -tv $f /var/www/html/ 
done 

, dikkatli xargs(1) okumalısınız; Şiddetle

find . -name "*.jpg" -print0 | xargs -n 1000 -I '{}' mv '{}' ../ 

, Sonunda

için çalışmak rename(1) hakkında daha fazla bilgi gerektiğini sanıyorum. Muhtemelen iş için yeterlidir.

+0

Ahududu pi üzerinde Bu komutla oynadım ve "do" anahtar sözcüğünden önce noktalı virgül taşındığında çalışmaya başladı, böylece komut şu şekilde gözüktü: "f in * .jpg; do mv -f $ f/var/www/html/jpgs /; done " –

1

Dene:

find /path/to/old-directory -type f | xargs -i mv "{}" /path/to/new-directory 
İlgili konular