বহনযোগ্যতার জন্য, আমি লিনাক্স বা বিএসডি-র সাথে নির্দিষ্ট সেডের বৈশিষ্ট্যগুলিতে নির্ভর করি না। পরিবর্তে আমি overwrite
স্ক্রিপ্টটি কার্নিগান এবং পাইকের বই ইউনিক্স প্রোগ্রামিং পরিবেশের উপর ব্যবহার করি।
কমান্ডটি তখন
find /the/folder -type f -exec overwrite '{}' sed 's/old/new/g' {} ';'
এবং overwrite
স্ক্রিপ্ট (যা আমি পুরো জায়গা জুড়ে ব্যবহার করি)
#!/bin/sh
case $# in
0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2
esac
file=$1; shift
new=/tmp/$$.new; old=/tmp/$$.old
trap 'rm -f $new; exit 1' 1 2 15
if "$@" >$new
then
cp $file $old
trap 'trap "" 1 2 15; cp $old $file # ignore signals
rm -f $new $old; exit 1' 1 2 15
cp $new $file
else
echo "overwrite: $1 failed, $file unchanged" 1>&2
exit 1
fi
rm -f $new $old
ধারণাটি হ'ল এটি কোনও ফাইলকে ওভাররাইট করে কেবল যদি কোনও কমান্ড সফল হয়। দরকারে find
এবং যেখানে আপনি ব্যবহার না করার চাইবেন
sed 's/old/new/g' file > file
কারণ শেল ফাইলটি sed
পড়ার আগে এটি কেটে দেয় ।