Tidak menghitung mv
, Anda tidak benar-benar membutuhkan proses luar untuk ini sama sekali - Anda dapat jenis hanya poof mereka.
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
)
Meski begitu, itu berarti mv
doa per file, dan jadi mungkin rename
lebih baik. Meskipun ini harus bekerja diberikan hanya POSIX mv
dalam $PATH
dan POSIX shell.
Jadi, saya membuat semacam demo gila untuk ini. Set tes dihasilkan seperti:
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
Pertama-tama saya akan menjadi orang pertama yang mengakui bahwa perintah di atas menghasilkan hasil yang dapat lebih mudah diperoleh dengan cara lain. Tetapi cara lain kemungkinan tidak akan menunjukkan dengan baik apa yang mungkin dilakukan dengan $IFS
sedikit imajinasi (sakit?) .
Jadi bit pertama cukup mudah:
tee
mengeluarkan 5 salinan inputnya - heredocument dipanggil CGEN
dd
blok inputnya oleh baris baru pada 90 byte per blok dan pipa itu untuk ...
sed
bergabung dengan 2 dari blok-blok itu pada dua \n
karakter ewline, '
kutip-tunggal hasil, dan menambahkan string touch --
untuk setiap siklus baris sebelum disalurkan ke ...
sh
yang kemudian mengeksekusi semua input sebagai perintah shell
The #CGEN
bit meskipun ... Nah, sebentar ...
bagian bawah printf
mencetak 252 0s
berikutnya dari terakhir menerima 252 ''
argumen null-string dan untuk setiap cetakan isi $n
diikuti oleh string" $i "
eval
menafsirkan argumen berikutnya printf
sebelum mencetak hasil penafsiran itu sebagai angka oktal yang ditopang oleh 2 backslash sepotong
yang terakhir printf
mencetak nilai-nilai byte untuk oktal-2 itu pada suatu waktu diikuti oleh string -_ ---___
untuk setiap pasangan
$n
diinisialisasi ke persamaan yang akan bertambah $i
satu untuk setiap evaluasi kecuali bahwa ia melompati nilai 10, 39, atau 47 - (yang \n
ewline, '
kutip tunggal, dan /
garis miring dalam desimal ASCII secara berurutan )
Hasil akhirnya adalah direktori yang berisi banyak nama file yang benar-benar jelek yang mengandung setiap byte di charset saya dari 1 hingga 255 kecuali tanda kutip tunggal (hanya dilewati untuk menghindari satu sed s///
pernyataan lagi ) dan /
slash. Nama file tersebut terlihat seperti ini:
(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 -_ ---___$
Sekarang saya akan mendapatkan beberapa data pada file-file ini:
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 '_ -'
KELUARAN
#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
Baik. Akhirnya, untuk bertindak:
ifsqz '_ -'
chksqz '_ -'
KELUARAN
#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
Keberhasilan! Anda dapat melihat sendiri:
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