मेरे पास एक .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
3 जवाब
जैसा कि आप सुझाव देते हैं, इस प्रकार का कार्य awk कर सकते हैं (हालांकि नीचे एड मॉर्टन की टिप्पणी देखें)। आप निम्न कोशिश कर सकते हैं, जिसका परीक्षण GNU awk के साथ किया जाता है। अपनी कार्यशील निर्देशिका से आप यह कर सकते हैं:
awk '{system("mv data/"$1"*.jpg " $2)}' inputfile
स्पष्टीकरण: यहां system()
फ़ंक्शन का उपयोग किया जाता है। system()
फ़ंक्शन आपको एक एक्सप्रेशन के रूप में दिए गए कमांड को निष्पादित करने की अनुमति देता है। इस मामले में:
- हम डेटा निर्देशिका में जेपीजी फ़ाइल को संबोधित करने के लिए
mv
(चाल) कमांड का उपयोग करते हैं और इनपुट फ़ाइल में पहले फ़ील्ड$1
का उपयोग करते हैं। - फिर हम गंतव्य निर्देशिका के लिए इनपुट फ़ाइल के दूसरे क्षेत्र
$2
का उपयोग करते हैं।
system()
फ़ंक्शन को मानक C लाइब्रेरी फ़ंक्शन के बाद तैयार किया गया है। GNU Awk यूजर गाइड में आगे पढ़ें
while read fil id
do
mv -f "data/"*"$fil"*".jpg" "$id/"
done < file
फ़ाइल से दो फ़ील्ड (इस मामले में फ़ाइल कहा जाता है) को लूप में पढ़ें और एमवी कमांड को बनाने और निष्पादित करने के लिए चर का उपयोग करें।
विचार करें कि आपकी .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
को आपकी वर्तमान कार्यशील निर्देशिका के पथ के रूप में बताया जाना चाहिए।
संबंधित सवाल
नए सवाल
linux
LINUX QUESTIONS को संबंधित होना चाहिए। इस टैग का उपयोग केवल तभी करें जब आपका प्रश्न लिनक्स एपीआई या लिनक्स-विशिष्ट व्यवहार का उपयोग करके प्रोग्रामिंग से संबंधित हो, न कि केवल इसलिए कि आप लिनक्स पर अपने कोड को चलाने के लिए होते हैं। यदि आपको लिनक्स समर्थन की आवश्यकता है तो आप https://unix.stackexchange.com या विशिष्ट लिनक्स वितरण की स्टैक एक्सचेंज साइट जैसे https://askubuntu.com या https://elementaryos.stackexchange.com/ की कोशिश कर सकते हैं