फ़ाइल को सूची में ले जाएं (प्रमुख व्हाट्सएप के साथ)


13

मेरे पास एक फ़ाइल है जिसमें फ़ाइल नाम हैं। उदाहरण के लिए:

/tmp/list.txt (यह प्रत्येक पंक्ति के प्रारंभ में रिक्त स्थान के साथ है):

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

मैं चाहता हूँ, एक लाइन का उपयोग कर, सभी में सूचीबद्ध फ़ाइलों को स्थानांतरित करने /tmp/list.txtके लिए/app/dest

तो यह कुछ इस तरह होना चाहिए:

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

जवाबों:


21

आप केवल (GNU मानकर ) -tविकल्प याद कर रहे हैं :mvmv

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

या उससे कम (X Tian के जवाब से प्रेरित):

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

अग्रणी (और संभव अनुगामी) रिक्त स्थान हटा दिए जाते हैं। फाइलनाम के भीतर रिक्त स्थान समस्याओं को जन्म देगा।

यदि आपके पास फ़ाइल नाम में स्थान या टैब या उद्धरण या बैकस्लैश हैं, तो GNU मानकर xargsआप उपयोग कर सकते हैं:

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

जवाब के लिए धन्यवाद । इसके साथ मैं उनके नाम के साथ बहुत सारी फ़ाइलों की सूची बना सकता हूं, और अनुसरण के साथ दूसरे फ़ोल्डर में जा सकता हूं: ls | grep -e "[!]]" | टी 001.txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t / destinypath /
inukaze

6

मान लें कि आपके फ़ाइल नाम अपेक्षाकृत कम हैं (कोई नया वर्ण या अजीब वर्ण नहीं):

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

अजीब फ़ाइल नामों से निपटने के लिए (यदि फ़ाइल नाम में कोई नई रेखा है तो टूट जाता है):

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

Hi terdon, csv फाइल में उनके मैच के आधार पर फोल्डर को नई निर्देशिका में कैसे ले जाना है? क्या आप मुझे इसके साथ मदद कर सकते हैं [ unix.stackexchange.com/questions/433068/… धन्यवाद !!
user3351523

@ user3351523 आपका प्रश्न बंद कर दिया गया है। मदद के लिए यादृच्छिक लोगों को पूछने से वह नहीं बदलेगा। इसके बजाय, प्रश्न को संपादित करें, और बताएं कि डुप्लिकेट में समाधान आपकी मदद कैसे नहीं करते हैं। अगर कुछ "काम नहीं किया", तो समझाइए कि यह कैसे विफल हुआ। समाधान आपके लिए काम करना चाहिए, इसलिए आपको यह समझाने की ज़रूरत है कि जब आप उन्हें आज़माते हैं तो क्या होता है।
terdon

मैंने वह किया। आप देख सकते हैं।
user3351523

@ user3351523 आपने स्पष्ट नहीं किया है कि आपके लिए डूप के समाधान विफल क्यों हैं। और आपने यह नहीं बताया कि आपके द्वारा दिए गए उत्तर कैसे विफल हो गए। आपको बस उपयोग करने की आवश्यकता हो सकती है cp -Hrलेकिन मुझे नहीं पता कि OSX इसका cpसमर्थन करता है या नहीं।
terdon


1

शुद्ध xargs फ़ाइल से सीधे पढ़ना

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

नीचे 1 संपादित करें - @Anthon की टिप्पणी के बाद,

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

1
-iपदावनत है, और यह, या यह प्रतिस्थापन-मैं imply -l/ --max-lines=1। और यह mvप्रत्येक फ़ाइल के लिए अलग से निष्पादित होने का कारण बनता है।
एंथन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.