गिनती नहीं mv
, आपको वास्तव में इसके लिए एक बाहरी प्रक्रिया की आवश्यकता नहीं है - आप उन्हें केवल पूफ कर सकते हैं।
ifsqz() ( LC_ALL=C sqz=$1
isf() { [ -e "$1" ] || [ -L "$1" ] ; }
set -- * ; set -f
for f do isf "$f" || break
IFS=$sqz; set -- $f; IFS=
isf "$*" || mv -- "$f" "$*"
done
)
हालांकि, इसका मतलब है कि mv
प्रति फ़ाइल एक मंगलाचरण, और इसलिए शायद rename
बेहतर है। हालांकि यह केवल दिए गए काम करना चाहिए एक POSIX mv
में $PATH
और एक POSIX खोल।
इसलिए, मैं इसके लिए एक तरह का क्रेजी डेमो लेकर आया हूं। परीक्षण सेट की तरह उत्पन्न होता है:
tee - - - - <<CGEN |\
dd cbs=90 conv=unblock |\
sed 'G;$!N'";s/^/touch -- '/;s/$/'/" |sh
$( #BEGIN CGEN
LC_ALL=C
i= n='"$((i=((i=i+1)==10||i==39||i==47)>0?(i+1):i))"'
printf '%b -_ ---___' $(
IFS=0; eval \
printf '"\\\\%04o\\\\%04o "' "$(
printf "$n"' "$i" '%s $(
printf %.252d
#END
))"))
CGEN
पहली जगह में मैं यह स्वीकार करने वाला पहला व्यक्ति बनूँगा कि उपरोक्त कमांड ऐसे परिणाम उत्पन्न करता है जो अन्य माध्यमों से अधिक आसानी से प्राप्त किए जा सकते हैं। लेकिन अन्य साधनों के साथ $IFS
- साथ और थोड़ी (बीमार?) कल्पना के साथ भी क्या किया जा सकता है, इसका प्रदर्शन नहीं किया जाएगा ।
तो पहला बिट काफी सीधा-आगे है:
tee
इसके इनपुट की 5 प्रतियों को बाहर निकालता है - जिसे हेरिडेक्जिमेंट कहा जाता है CGEN
dd
90 बाइट्स प्रति ब्लॉक और पाइप्स पर newlines द्वारा इसके इनपुट को ब्लॉक करता है ...
sed
उन दो खंडों में से 2 को दो \n
इललाइन वर्णों पर जोड़ देता है, जो '
एकल-परिणाम का उद्धरण देता है, और touch --
हर पाइप चक्र के लिए स्ट्रिंग को प्री - आउट करता है ...
sh
जो तब शेल कमांड के रूप में सभी इनपुट को निष्पादित करता है
#CGEN
बिट हालांकि ... ठीक है, संक्षेप में ...
नीचे का printf
निशान 252 0 s है
पिछले से अगले 252 ''
अशक्त तर्क प्राप्त करता है और प्रत्येक के $n
लिए स्ट्रिंग द्वारा पीछा की सामग्री प्रिंट" $i "
eval
अगले व्याख्या के तर्क की व्याख्या करने printf
से पहले उस व्याख्या के परिणामों को प्रिंट करता है क्योंकि अष्टक अंक 2 बैकस्लैश द्वारा एक टुकड़ा होता है
अंतिम printf
उन ऑक्टल्स के लिए बाइट के मानों को एक बार में -_ ---___
प्रत्येक जोड़े के लिए स्ट्रिंग द्वारा प्रिंट करता है
$n
एक समीकरण के लिए शुरू किया जाता है जो $i
हर मूल्यांकन के लिए एक-एक करके बढ़ेगा सिवाय इसके कि यह 10, 39 या 47 मानों को छोड़ देता है - (जो क्रमशः ASCII दशमलव में \n
ewline, '
एकल-उद्धरण और /
स्लैश हैं)
अंतिम परिणाम एक निर्देशिका है जिसमें बहुत सारे बदसूरत फ़ाइलनाम होते हैं जिनमें 1 से 255 तक हर बाइट में एकल-उद्धरण (केवल एक और sed s///
बयान से बचने के लिए छोड़ दिया गया ) और /
स्लैश को छोड़कर । वे फ़ाइल नाम इस तरह दिखते हैं:
(set -- *; printf '%s\n\n##############\n\n%s\n' "${9}" "${34}") | cat -A
---___ww -_ ---___xx -_ ---___yy -_ ---___zz -_ ---___{{ -_ ---___|| -_ ---$
$
___}} -_ ---___~~ -_ ---___^?^? -_ ---___M-^@M-^@ -_ ---___M-^AM-^A -_ ---___M-^BM-^B -_ ---___M-^CM-^C$
$
##############$
$
-_ ---___M-ZM-Z -_ ---___M-[M-[ -_ ---___M-\M-\ -_ ---___M-]M-] -_ ---___M-^M-^ -_ ---___M-_M-_ -_$
$
---___M-`M-` -_ ---___M-aM-a -_ ---___M-bM-b -_ ---___M-cM-c -_ ---___M-dM-d -_ ---___M-eM-e -_ ---___$
अब मुझे इन फाइलों पर कुछ डेटा मिलेगा:
chksqz() ( LC_ALL=C sqz=$1
set -- * ; set -f ; IFS= ; tc="$*"
printf '#%s\n' \
"There are $# files in this test directory." \
"All filenames combined contain a total of ${#tc} bytes."
IFS=$sqz ; set -- $* ; IFS= ; sc="$*"
printf "%s '$sqz'" \
"#Of which ${#sc} bytes are not"\
" and $((${#tc}-${#sc})) bytes are"
set +f ; unset IFS
printf ".\n#%s\n#Total:\t%d\n#Other:\t%d\n#'$sqz':\t%d\n" \
"And to confirm these figures:" \
$( printf %s * | wc -c
printf %s * | tr -d "$sqz" | wc -c
printf %s * | tr -dc "$sqz" | wc -c
))
chksqz '_ -'
आउटपुट
#There are 101 files in this test directory.
#All filenames combined contain a total of 17744 bytes.
#Of which 2692 bytes are not '_ -' and 15052 bytes are '_ -'.
#And to confirm these figures:
#Total: 17744
#Other: 2692
#'_ -': 15052
ठीक है। अब अंत में, कार्रवाई करने के लिए:
ifsqz '_ -'
chksqz '_ -'
आउटपुट
#There are 101 files in this test directory.
#All filenames combined contain a total of 2692 bytes.
#Of which 2692 bytes are not '_ -' and 0 bytes are '_ -'.
#And to confirm these figures:
#Total: 2692
#Other: 2692
#'_ -': 0
सफलता! आप अपने लिए देख सकते है:
ls
????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
???????????????????????????
???????????????????????????
???????????????????????????
????????????????????????????
????????????????????????????
????????????????
??????????????????????
????????????????????????
??????????????????????????
??????????????????????????
??????????????????????????
??????????????????????????
???????????????????????????
???????????????????????????
???????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
??????????????????????????
????????????????????????
????????????????????
??????????????????
????????????????????????????
??
????????????????????????????
??????????????????????????
????????????????????????????
????????????????????????????
????????????????????!!""##
??????????????????!!""##$$
????????????????!!""##$$%%
????????????!!""##$$%%&&((
????????!!""??##$$%%&&(())
$$%%&&(())**??++,,..0011
%%&&(())**++??,,..00112233
&&(())**++,,??..0011223344
))**++,,..??0011223344556
**++,,..00??11223344556677
22334455667788??99::;;<<==>>
445566778899??::;;<<==>>??@@
5566778899::;;??<<==>>??@@AA
6778899::;;<<??==>>??@@AABB
8899::;;<<==??>>??@@AABBCCDD
\\]]^^``aa??bbccddeeffgghh
]]^^``aabbc??cddeeffgghhii
^^``aabbccdd??eeffgghhiijj
??@@AABBCCDDEE??FFGGHHIIJJKK
AABBCCDDEEFF??GGHHIIJJKKLLM
BBCCDDEEFFGG??HHIIJJKKLLMMNN
CCDDEEFFGGHHII??JJKKLLMMNNOO
EEFFGGHHIIJJ??KKLLMMNNOOPPQQ
ffgghhiijjkk??llmmnnooppqqrr
gghhiijjkkllmm??nnooppqqrrss
iijjkkllmmnn??ooppqqrrsstt
jjkkllmmnnoo??ppqqrrssttuuvv
kkllmmnnooppqq??rrssttuuvvww
LLMMNNOOPPQQRR??SSTTUUVVWWXX
MNNOOPPQQRRSS??TTUUVVWWXXYY
OOPPQQRRSSTT??UUVVWWXXYYZZ[[
PPQQRRSSTTUUVV??WWXXYYZZ[[\\
RRSSTTUUVVWW??XXYYZZ[[\\]]
ssttuuvvwwxx??yyzz{{||}}~~??
ttuuvvwwxxyyz??z{{||}}~~????
uuvvwwxxyyzz{{??||}}~~??????
wwxxyyzz{{||??}}~~??????????
xxyyzz{{||}}~~??????????????
YYZZ[[\\]]^^??``aabbccddee
ZZ[[\\]]^^``??aabbccddeeff