dosyayı dosyadaki listeye göre taşı (baştaki boşluk ile)


13

Dosya adlarını içeren bir dosyam var. Örneğin:

/tmp/list.txt (her satırın başındaki boşluklarla):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust

Ben listelenen tüm dosyaları taşımak için, bir satırını kullanarak, istediğiniz /tmp/list.txtkadar/app/dest

Yani böyle bir şey olmalı:

cat /tmp/list.txt | xargs mv /app/dest/

Yanıtlar:


21

Sadece (GNU varsayarak ) -tseçeneğini kaçırıyorsunuz :mvmv

cat /tmp/list.txt | xargs mv -t /app/dest/

veya daha kısa (X Tian'ın cevabından esinlenerek):

xargs mv -t /app/dest/ < /tmp/list.txt

önde gelen (ve olası sondaki) boşluklar kaldırılır. Dosya adlarındaki boşluklar sorunlara yol açacaktır.

Dosya adlarında boşluklar, sekmeler veya tırnak işaretleri veya ters eğik çizgiler xargsvarsa, GNU varsayarsak :

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

Cevap için teşekkür ederim . bununla ben onların adında [!] ile dosyaların bir sürü listesini yapmak ve aşağıdaki ile başka bir klasöre taşıyabilirsiniz: ls | grep -e ". [!]]" | tee 001. txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t /
destinypath

6

Dosya adlarınızın nispeten aklı başında olduğunu varsayarsak (yeni satır veya garip karakter olmaz):

while read file; do mv "$file" /app/dest/; done < list.txt 

Garip dosya adlarıyla başa çıkmak için (bir dosya adında satırsonu varsa kırılır):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

Merhaba terdon, csv dosyasındaki eşleşmelerine göre klasörleri yeni dizine nasıl taşıyabilirim? Bana bu konuda yardımcı olabilir misiniz [ unix.stackexchange.com/questions/433068/… Teşekkür ederim !!
user3351523

@ user3351523 sorunuz kapatıldı. Rastgele insanlardan yardım istemek bunu değiştirmez. Bunun yerine, soruyu düzenleyin ve kopyadaki çözümlerin size nasıl yardımcı olmadığını açıklayın. Bir şey "işe yaramadıysa" nasıl başarısız olduğunu açıklayın. Çözümler sizin için çalışmalıdır, bu yüzden denediğinizde neler olduğunu açıklamanız gerekir.
terdon

Ben bunu yaptım. bir göz atabilirsiniz.
user3351523

@ user3351523 dupe çözümlerinin sizin için neden başarısız olduğunu açıklamadınız. Ve aldığınız cevapların nasıl başarısız olduğunu açıklamadınız. Sadece kullanmanız gerekebilir cp -Hrama OSX'in bunu cpdestekleyip desteklemediğini bilmiyorum .
terdon

3
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done

1

Doğrudan dosyadan okunan saf xargs

xargs -l -i < flist  mv -v {} /app/dst

1 - @Anthon'un aşağıdaki yorumunu yaptıktan sonra,

xargs -I{} < flist  mv -v {} /app/dst

1
-ideprecrated ve, veya onun yerine -I ima edilir -l/ --max-lines=1. Ve mvher dosya için ayrı ayrı yürütülmesine neden olur .
Anthon

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.