सवाल बैश: निर्देशिका में सभी फ़ाइलों की फ़ाइल सीमाओं को बदलना और विषम रेखाओं की प्रतिलिपि बनाना


सभी को लेने के बारे में कैसे जाना होगा *.txt किसी दिए गए फ़ोल्डर (उपयोगकर्ता इनपुट) में फ़ाइलें और समान नाम वाली फ़ाइलों को विषम रेखाओं की प्रतिलिपि बनाना, लेकिन अलग-अलग एक्सटेंशन (बल्ले / एचटीएमएल या कुछ और)

मै मानता हूँ cp या mv काम नहीं करेंगे, कुछ पसंद है sed लाइनों के लिए चाल करना चाहिए, लेकिन मुझे एक साथ सबकुछ शामिल करने में कठिनाई हो रही है।

अगर कोई मुझे इसे एक साथ टुकड़े करने में मदद कर सकता है तो मैं बहुत आभारी रहूंगा

#!/bin/bash
clear

#seems like a good idea to get a full path to the directory im gonna be working in, not #sure how to go about it though. 

path=pwd

#getting users input

read Directory

#check if said directory exists
if[ -d $Directory]; then
#if it does
#all files with .txt extention are to be copied 
for *.txt in $(ls)
do
mv *.txt *.bat

#aaand now im lost, didnt have a chance to even test this, since i have linux only in #my studying enviroment (uni), will get on my personal PC later on
#something like sed could/should work in there, but i have no idea how to go about it

#if doesnt
else
echo "Directory does not exist or you do not have a permission to alter its contents"

1
2017-12-15 23:15


मूल


क्या आप विषम रेखाओं को एक फ़ाइल में या विभिन्न फाइलों में ले जाना चाहते हैं? - kiri
मैं विषम रेखाओं को विभिन्न फाइलों में कॉपी करना चाहता हूं। उदाहरण के लिए 1.txt -copy विषम रेखाएं-> 1.bat - user225827


जवाब:


#!/bin/sh 
cd "$1" || { echo "Couldn't cd to directory $1.  Quitting." ; exit 1 ; } 
for fname in *.txt
do
    awk 'NR % 2 == 1 { print; }' "$fname" >"${fname%.txt}.bat"
done

उपरोक्त को एक फ़ाइल में रखें और फ़ाइल को निष्पादन योग्य बनाएं (chmod +x yourfilename)। अब, इस आदेश को उस निर्देशिका के साथ चलाएं जिसे आप पहले तर्क के रूप में संचालित करना चाहते हैं।

स्क्रिप्ट आपके द्वारा अनुरोधित निर्देशिका में बदल जाती है (cd "$1")। अगर यह विफल रहता है (निर्देशिका मौजूद नहीं है), तो स्क्रिप्ट एक त्रुटि संदेश से निकलती है। अगर cd "$1" सफल होता है, तो स्क्रिप्ट प्रत्येक के माध्यम से चला जाता है .txt निर्देशिका में फ़ाइल, विषम रेखाओं का चयन करता है (NR % 2 == 1) और एक्सटेंशन ".bat" को छोड़कर उन्हें एक ही नाम वाली फ़ाइल में लिखता है।


3
2017-12-15 23:24



धन्यवाद! अब इतना सरल लगता है कि मैं इसे देखता हूं अजीब दिखना है, क्योंकि मैं इस आदेश से अपरिचित हूं - user225827


सुनिश्चित नहीं है कि "विषम रेखाएं" [1] द्वारा आपका क्या मतलब है, लेकिन यह कथन केवल वही प्राप्त करता है जो आपका कोड वर्तमान में करने का प्रयास करता है:

cd "$1" && rename 's/\.txt$/.bat/' *.txt

अपने स्वयं के त्रुटि संदेशों को करने की कोई ज़रूरत नहीं है, खोल उन्हें ठीक कर देगा।

[1] यह एक यूनी होमवर्क असाइनमेंट की तरह लगता है।


0
2017-12-16 07:41



.txt फ़ाइलों से अजीब रेखाएं मैं नाम बदल रहा हूं। बहुत ज्यादा है, सी सेमेस्टर था कि मैं यूनी से पहले परिचित था, इसलिए सभी सी असाइनमेंट पूरा कर लिया, यूनिक्स से परिचित होने के लिए एक स्क्रिप्टिंग प्राप्त किया। सीखने के लिए बहुत सारी चीज़ें, और सी / सी ++ और कुछ असेंबली के बाद, दुनिया भर में चीजों को प्रकार से करने के बजाय, सभी तत्वों के माध्यम से एक-एक करके लूपिंग करने की बजाय एक नई अवधारणा है जिसे मुझे उपयोग करने की आवश्यकता है। चीयर्स! - user225827


उत्तर देने वाले सभी लोगों के लिए धन्यवाद, आपने मुझे बैश स्क्रिप्टिंग की कुछ समझ हासिल करने में बहुत मदद की है, अब यह सवाल हल हो गया है, कोई सवाल उठाने के बारे में कैसे होगा?

मैंने जॉन 1024 द्वारा प्रदान की गई स्क्रिप्ट का उपयोग किया, बिना किसी काम के काम किया। इसके लिए बहुत उपयोगी है। चियर्स

! / Bin / श

सीडी "$ 1" || {echo "निर्देशिका $ 1 को सीडी नहीं कर सका। छोड़ना।" ; बाहर निकलें 1; } * .txt में fname के लिए कर     अजीब 'एनआर% 2 == 1 {प्रिंट; } '' $ fname ">" $ {fname% .txt} .bat " किया हुआ


-1
2017-12-19 22:14



अगर @ जॉन 1024 द्वारा दिए गए उत्तर ने आपके लिए काम किया है तो कृपया "धन्यवाद" के रूप में अपना धन्यवाद जोड़ने के बजाय इसे स्वीकार करें - देखें askubuntu.com/help/accepted-answer - steeldriver