मैं फ़ाइलों को एक निर्देशिका से दूसरी निर्देशिका में ले जाना चाहता हूँ

find /data/1990 -name "*.dat" -exec mv {} /data1/1990/ \;

वह तो आसान था। अब मेरे पास /data/ कई वर्षों में 1990,1991,1992,1993,1994,1995 . है

इन वर्षों में कैसे लूप करें?

0
Barry 16 मार्च 2017, 20:20
क्या आपके पास अपने वर्षों के तहत सबफ़ोल्डर हैं? यदि नहीं, तो find अधिक है। आप बस mv का उपयोग कर सकते हैं।
 – 
lurker
16 मार्च 2017, 20:26
धन्यवाद लूप के बारे में क्या?
 – 
Barry
16 मार्च 2017, 20:29

3 जवाब

आप इसे इस तरह कर सकते हैं:

for i in `ls /data/`; 
do 
    echo "element=$i";  #put your code for each element
done
0
Kamil 16 मार्च 2017, 21:28

मैं अपनी वर्तमान कार्यशील निर्देशिका को बदलकर अपने जीवन को आसान बनाऊंगा:

cd /data
find 199[012345] -name "*.dat" -exec echo mv {} /data1/{} \;
0
Robᵩ 16 मार्च 2017, 21:33

आपने हमें यह नहीं बताया कि आप किस शेल का उपयोग कर रहे हैं (और वे प्रोग्रामिंग भाषाओं की तरह ही भिन्न होते हैं)। लेकिन बैश या zsh में, वर्ष सीमा प्रदान करने के लिए आप घुंघराले कोष्ठक का उपयोग कर सकते हैं, अर्थात:

for year in {1990..1995}; do
    find /data/$year -name "*.dat" -exec mv {} /data1/$year \;
done

आप अंकगणितीय मूल्यांकन और अधिक आधुनिक (?) ब्लॉक सिंटैक्स का भी उपयोग कर सकते हैं:

for ((year=1990; year<1995; year++)) {
    find /data/$year -name "*.dat" -exec mv {} /data1/$year \;
}
0
rsm 16 मार्च 2017, 22:17