मेरे पास एक .txt फ़ाइल है जिसमें आईडी और उनकी उम्र (पूर्णांक के रूप में) का एक कॉलम है। मैंने अपनी निर्देशिका में प्रत्येक आयु वर्ग (20-86 से लेकर) के लिए अलग-अलग फ़ोल्डर पहले ही बना लिए हैं। मेरी .txt फ़ाइल में प्रत्येक आईडी के लिए मैं अपनी .txt फ़ाइल के कॉलम दो में सूचीबद्ध उनकी आयु श्रेणी के आधार पर उनकी छवि (जो वर्तमान में "डेटा" फ़ोल्डर में संग्रहीत है) को उपयुक्त फ़ोल्डर में स्थानांतरित करना चाहता हूं।

लिनक्स में इसे कैसे करें इस पर कोई मदद की वास्तव में सराहना की जाएगी!

विभिन्न प्रत्ययों में समाप्त होने वाली फ़ाइलों के साथ अद्यतन उदाहरण।

वर्तमान कार्य निर्देशिका:

data/ 20/ 21/ 22/ 23/ 24/ ...

पाठ फ़ाइल:

ID001 21
ID002 23
ID003 20
ID004 22
ID005 21

ls data/

ID001-XXX-2125.jpg
ID002-YYY-2370.jpg
ID003-XXX-2125.jpg
ID004-YYY-2370.jpg
ID005-XXX-2125.jpg

वांछित आउटपुट:

20/
ID003-XXX-2125.jpg

21/
ID001-XXX-2125.jpg
ID005-XXX-2370.jpg

22/
ID004-YYY-2370.jpg

23/
ID002-YYY-2370.jpg
-1
M_Oxford 15 जिंदा 2021, 14:30

3 जवाब

सबसे बढ़िया उत्तर

जैसा कि आप सुझाव देते हैं, इस प्रकार का कार्य awk कर सकते हैं (हालांकि नीचे एड मॉर्टन की टिप्पणी देखें)। आप निम्न कोशिश कर सकते हैं, जिसका परीक्षण GNU awk के साथ किया जाता है। अपनी कार्यशील निर्देशिका से आप यह कर सकते हैं:

awk '{system("mv data/"$1"*.jpg " $2)}' inputfile

स्पष्टीकरण: यहां system() फ़ंक्शन का उपयोग किया जाता है। system() फ़ंक्शन आपको एक एक्सप्रेशन के रूप में दिए गए कमांड को निष्पादित करने की अनुमति देता है। इस मामले में:

  1. हम डेटा निर्देशिका में जेपीजी फ़ाइल को संबोधित करने के लिए mv (चाल) कमांड का उपयोग करते हैं और इनपुट फ़ाइल में पहले फ़ील्ड $1 का उपयोग करते हैं।
  2. फिर हम गंतव्य निर्देशिका के लिए इनपुट फ़ाइल के दूसरे क्षेत्र $2 का उपयोग करते हैं।

system() फ़ंक्शन को मानक C लाइब्रेरी फ़ंक्शन के बाद तैयार किया गया है। GNU Awk यूजर गाइड में आगे पढ़ें

2
Thomas Hansen 15 जिंदा 2021, 19:15
while read fil id
do
    mv -f "data/"*"$fil"*".jpg" "$id/"
done < file

फ़ाइल से दो फ़ील्ड (इस मामले में फ़ाइल कहा जाता है) को लूप में पढ़ें और एमवी कमांड को बनाने और निष्पादित करने के लिए चर का उपयोग करें।

2
Raman Sailopal 15 जिंदा 2021, 15:30

विचार करें कि आपकी .txt फ़ाइल आपकी वर्तमान कार्यशील निर्देशिका में है। क्या आप इस लिखित और परीक्षित स्क्रिप्ट को आजमा सकते हैं?

#!/bin/sh    
DIR_CWD="/path/to/current_working_directory"
cd "$DIR_CWD/data"
    for x in *; do
        ID_number=`echo $x | awk -F"-" '{print $1}'`
        DIR_age=`cat "$DIR_CWD/file.txt" | grep $ID_number | awk '{print $2}'`
        mv -- "$DIR_CWD/data/$x" "$DIR_CWD/$DIR_age"
    done

ध्यान दें कि DIR_CWD को आपकी वर्तमान कार्यशील निर्देशिका के पथ के रूप में बताया जाना चाहिए।

0
Ahmet Said Akbulut 17 जिंदा 2021, 14:57