Bunu deniyorum ve çalışmıyor:
ls file_* | xargs mv {} temp/
Herhangi bir fikir?
Bunu deniyorum ve çalışmıyor:
ls file_* | xargs mv {} temp/
Herhangi bir fikir?
Yanıtlar:
OS X’te:
ls file_* | xargs -J {} mv {} temp/
Linux'ta:
ls file_* | xargs -i {} mv {} temp/
/sonunda isteğe bağlıdır. İsterseniz dahil edebilirsiniz, ancak gerekli değildir.
-i(veya -J), yalnızca sonlarına taranmak yerine, gelen argümanlarla değiştirilecek bir belirteç belirtir. man xargs
-i{}boşluksuz. Ya da söyle -I {}.
-iyerini alıyor. ls file_* | xargs -iFOO mv FOO temp/tam olarak aynı çalışır.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
findlskabuğunuzun izin verdiği program argümanlarının sayısından daha fazla dosya olabileceğinden daha iyidir .
file_*geçerli dizindeki dosyaları işlemeyi arzu ettiğini , buna karşın find(ek seçenek olmadan) geçerli dizinin altındaki tüm dizin ağacını arayacağını unutmayın.
mvdosyaları birlikte mi yoksa tek tek mi işlemeniz umrunda olmamakla birlikte, diğer bazı kullanımlar olabilir.
@ User1953864 tarafından önerildiği gibi: { -i, -J}, gelen argümanlarla değiştirilecek bir belirteç belirtin.
Örneğin ls:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
Daha sonra tüm java dosyalarını someDirectory klasörüne taşımak xargsaşağıdaki gibi olacaktır:
Linux'ta
ls *.java | xargs -i mv {} someDirectory/
MacOS'ta
ls *.java | xargs -J mv {} someDirectory
Başka bir çözüm olabilir:
for f in file_* ; do
mv $f temp/$f
done
Dezavantajı, mvher dosya için yeni bir işlem gerektirmesidir.
xargs -n10örneğin)