आप एक आवरण आदेश का उपयोग कर सकते हैं:
- फ़ाइल का नाम बदल देता है
- पृष्ठभूमि में दर्शक चलाता है
- जब दर्शक
mutt
इसे करने देने के बजाय वापस आ गया है तो सफाई करता है।
कुछ इस तरह:
#! /bin/sh -
TMPDIR=$(
mutt -D 2> /dev/null |
awk -F\" '
$1 == "tmpdir=" {
gsub("~", ENVIRON["HOME"], $2)
print $2
exit
}'
)
[ -n "$TMPDIR" ] || exit
export TMPDIR
nargs=$#
nfiles=0
for i do
case $i in
("$TMPDIR"/?*)
new_file=$(mktemp -ut "XXXXX${i##*/}") &&
mv -- "$i" "$new_file" &&
nfiles=$(($nfiles + 1)) &&
set -- "$new_file" "$@" "$new_file" &&
continue
esac
set -- "$@" "$i"
done
run_command() (
shift "$(($nargs + $nfiles))"
exec "$@"
)
(
run_command "$@"
while [ "$nfiles" -gt 0 ]; do
set -- "$@" "$1"
shift
nfiles=$(($nfiles - 1))
done
shift "$((2*$nargs))"
rm -f -- "$@"
) &
और कुछ इस तरह से डालें:
image/*; muttv eog %s;
muttv
वह लिपि कहां है।
उपरोक्त कोई तर्क नहीं देता है कि तर्कों की सूची में फ़ाइल नाम (s) कहां दिखाई देता है या उनमें कौन सा वर्ण है ... जिसके कारण हम सबसे पहले पूछते हैं mutt
कि इसका क्या tmpdir
है (इसलिए हम इसका उपयोग यह निर्धारित करने के लिए करते हैं कि फाइलें क्या हैं देखें )।
ज्यादातर मामलों में, यह ओवरकिल होगा, और जैसा कि गाइल्स बताते हैं कि अगर आपके मेलबॉक्स फ़ोल्डर के लिए tmpdir निर्दिष्ट किया गया है तो काम नहीं कर सकता है।
एक सरल एक होगा:
#! /bin/sh -
nargs=$#
eval "file=\${$nargs}"
newfile=$(dirname -- "$file")/new-$(basename -- "$file")
while [ "$nargs" -gt 1 ]; do
set -- "$@" "$1"
shift
nargs=$(($nargs - 1))
done
shift
mv -- "$file" "$newfile" || exit
(
"$@" "$newfile"
rm -f -- "$newfile"
) &
बदलें mv
के साथ cp
यदि आप द्वारा प्रदान की मूल फ़ाइल को छूने के लिए नहीं करना चाहती mutt
।