लिनक्स में मैं एक निर्देशिका में एक फ़ाइल खोजने की कोशिश कर रहा हूं, इसे दूसरे नाम से बैकअप लें और फिर, इसे दूसरे के साथ बदलें।

मैंने इन आदेशों के साथ पहले दो कार्यों की कोशिश की

find foldername -name filename.html; -exec sed -i .bak;

लेकिन यह कहता है

बैश: -exec: कमांड नहीं मिला

-2
Sergio Gandrus 8 जून 2018, 13:12

2 जवाब

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

ये कोशिश करें:

find foldername -name filename.html -exec cp -vp {}{,.bak} \; -exec truncate -s 0 {} \;

यह find के exec विकल्प का उपयोग करता है जैसे ऐसा लगता है कि आपने उपयोग करने का प्रयास किया है। फिर cp फ़ाइल की प्रतिलिपि बनाता है ({} के साथ निर्दिष्ट) और प्रतिलिपि में .bak संलग्न करता है और p विकल्प के साथ जो कुछ भी कर सकता है उसे सुरक्षित रखता है:

निर्दिष्ट विशेषताओं को संरक्षित करें (डिफ़ॉल्ट: मोड, स्वामित्व, टाइमस्टैम्प), यदि संभव हो तो अतिरिक्त विशेषताएं: संदर्भ, लिंक, xattr, सभी

यह मूल फ़ाइल को भी वहीं छोड़ देता है।

1
Brandon Miller 8 जून 2018, 14:04

आप निम्न कार्य कर सकते हैं:

find . -name 'FILE_PATTERN_HERE' | xargs -I file_name cp file_name file_name.bkp

आप find कमांड के आउटपुट को xargs का उपयोग करके cp पर पाइप कर सकते हैं। यहाँ file_name, find के आउटपुट के रूप में कार्य करता है।

उदाहरण

find . -name 'logback.xml*'

आउटपुट:

./logback.xml
./apache-cassandra-3.11.1/conf/logback.xml

कमांड चलाने के बाद

find . -name 'logback.xml*' | xargs -I file_name cp file_name file_name.bkp
find . -name 'logback.xml*'

आउटपुट:

./logback.xml
./apache-cassandra-3.11.1/conf/logback.xml
./apache-cassandra-3.11.1/conf/logback.xml.bkp
./logback.xml.bkp
-1
pkgajulapalli 8 जून 2018, 13:46