계산하지 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 문자에서 해당 블록 중 2 개를 결합 '
하고 결과를 작은 따옴표로 묶고 touch --
모든 줄주기마다 문자열 을 앞에 추가하여 ...
sh
그런 다음 모든 입력을 쉘 명령으로 실행합니다.
#CGEN
비트하지만 ... 음, 간단하게 ...
하단 printf
은 252 0을 인쇄합니다
last from next는 252 개의 ''
null-string 인수를 수신 하고 각각의 인쇄에 대해 $n
그 뒤에 문자열 이 뒤 따릅니다." $i "
eval
그 해석의 printf
결과를 한 조각의 백 슬래시가 앞에 붙인 8 진수로 인쇄하기 전에 다음의 인수를 해석합니다.
마지막 printf
은 한 번에 8 진수 2의 바이트 값을 인쇄 한 다음 -_ ---___
각 쌍 의 문자열 을 인쇄합니다.
$n
는 $i
10, 39 또는 47의 값을 건너 뛰는 것을 제외하고 모든 평가에 대해 1 씩 증가하는 방정식으로 초기화됩니다 ( 각각 ASCII 10 진수의 \n
ewline, '
작은 따옴표 및 /
슬래시).
최종 결과는 작은 따옴표 (하나 이상의 sed s///
문 을 피하기 위해 건너 뛰기 ) 와 /
슬래시를 제외하고 1에서 255까지 내 문자 세트의 모든 바이트를 포함하는 실제로 추악한 파일 이름이 많은 디렉토리 입니다. 해당 파일 이름은 다음과 같습니다.
(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