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 {}
.
-i
yerini alıyor. ls file_* | xargs -iFOO mv FOO temp/
tam olarak aynı çalışır.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
ls
kabuğ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.
mv
dosyaları 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 xargs
aş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ı, mv
her dosya için yeni bir işlem gerektirmesidir.
xargs -n10
örneğin)