ไม่นับ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 ไบต์ต่อบล็อกและไปป์ที่ ...
sed
รวม 2 บล็อกเหล่านั้นเข้ากับ\n
อักขระ ewline สองตัว'
อัญประกาศผลลัพธ์เดียวและเติมสตริงtouch --
สำหรับทุกรอบบรรทัดก่อนที่จะไพพ์ไปที่ ...
sh
ซึ่งจะดำเนินการอินพุตทั้งหมดเป็นคำสั่งเชลล์
#CGEN
บิต แต่ ... ดีชั่วครู่ ...
ด้านล่างprintf
พิมพ์ 252 0 วินาที
ถัดไปจากครั้งสุดท้ายได้รับ''
อาร์กิวเมนต์สตริงโมฆะ252 และสำหรับแต่ละพิมพ์เนื้อหาของ$n
ตามด้วยสตริง" $i "
eval
ตีความข้อโต้แย้งของค่าถัดไปprintf
ก่อนที่จะพิมพ์ผลลัพธ์ของการตีความดังกล่าวเป็นตัวเลขฐานแปดที่เตรียมไว้โดย 2 เครื่องหมายแบ็กสแลชหนึ่งชิ้น
สุดท้ายprintf
พิมพ์ค่าไบต์สำหรับ octals เหล่านั้น 2 ในเวลาตามด้วยสตริง-_ ---___
สำหรับแต่ละคู่
$n
ถูกกำหนดค่าเริ่มต้นให้กับสมการที่จะเพิ่มขึ้นทีละ$i
หนึ่งสำหรับการประเมินผลทุกครั้งยกเว้นว่าจะข้ามค่า 10, 39, หรือ 47 - (ซึ่งเป็น\n
ewline, '
ใบเสนอราคาเดียวและ/
เครื่องหมายทับในทศนิยม ASCII ตามลำดับ)
ผลลัพธ์ที่ได้คือไดเรกทอรีที่มีชื่อไฟล์น่าเกลียดจำนวนมากที่บรรจุทุกไบต์ในชุดอักขระของฉันตั้งแต่ 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