Không đếm mv
, bạn không thực sự cần một quá trình bên ngoài cho điều này ở tất cả - bạn có thể loại chỉ poof họ.
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
)
Tuy nhiên, điều đó có nghĩa là một mv
lời gọi cho mỗi tệp, và vì vậy có lẽ rename
là tốt hơn. Mặc dù điều này sẽ làm việc đưa ra chỉ một POSIX mv
trong $PATH
và một lớp vỏ POSIX.
Vì vậy, tôi đã đưa ra một loại demo điên rồ cho việc này. Bộ kiểm tra được tạo như sau:
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
Ở nơi đầu tiên tôi sẽ là người đầu tiên thừa nhận rằng lệnh trên tạo ra kết quả có thể dễ dàng thu được hơn bằng các phương tiện khác. Nhưng các phương tiện khác có thể sẽ không thể hiện tốt như những gì có thể được thực hiện $IFS
và một chút trí tưởng tượng (bệnh?) .
Vì vậy, bit đầu tiên khá đơn giản:
tee
bỏ ra 5 bản sao đầu vào của nó - di sản được gọi là CGEN
dd
chặn đầu vào của nó bằng các dòng mới ở 90 byte mỗi khối và các đường dẫn đến ...
sed
kết hợp 2 trong số các khối đó trên hai \n
ký tự ewline, '
trích dẫn một kết quả và thêm chuỗi touch --
cho mỗi chu kỳ dòng trước khi chuyển sang ...
sh
mà sau đó thực thi tất cả các đầu vào như các lệnh shell
Các #CGEN
chút mặc dù ... Vâng, một thời gian ngắn ...
phía dưới printf
in 252 0s
tiếp theo từ cuối cùng nhận được 252 ''
đối số chuỗi rỗng và cho mỗi lần in, nội dung $n
theo sau là chuỗi" $i "
eval
diễn giải các đối số của phần tiếp theo printf
trước khi nó in kết quả của phần diễn giải đó dưới dạng các số bát phân được thêm vào bởi 2 dấu gạch chéo ngược một mảnh
cái cuối cùng printf
in các giá trị byte cho các octals 2 đó tại một thời điểm theo sau là chuỗi -_ ---___
cho mỗi cặp
$n
được khởi tạo thành một phương trình sẽ tăng thêm $i
một cho mỗi đánh giá ngoại trừ việc nó bỏ qua các giá trị 10, 39 hoặc 47 - (tương ứng là \n
ewline, '
trích dẫn đơn và /
gạch chéo trong thập phân ASCII)
Kết quả cuối cùng là một thư mục chứa rất nhiều tên tệp thực sự xấu xí chứa mỗi byte trong bộ ký tự của tôi từ 1 đến 255 ngoại trừ trích dẫn đơn (chỉ bỏ qua để tránh thêm một sed s///
câu lệnh) và /
dấu gạch chéo. Những tên tập tin trông như thế này:
(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 -_ ---___$
Bây giờ tôi sẽ nhận được một số dữ liệu trên các tệp này:
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 '_ -'
ĐẦU RA
#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
Đồng ý. Cuối cùng, hành động:
ifsqz '_ -'
chksqz '_ -'
ĐẦU RA
#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
Sự thành công! Bạn có thể tự mình xem:
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