Después de de esta prolongada búsqueda de datos dimos con la solución esta incógnita que presentan ciertos usuarios. Te compartimos la respuesta y nuestro deseo es servirte de mucha ayuda.
Solución:
La versión de rename
que viene con el perl
el paquete admite expresiones regulares:
rename "s/[-_ ]//g" *
Alternativamente,
rename -i "s/[-_ ]//g" *
los -i
la bandera hará rename
use el modo interactivo, preguntando si el destino ya existe, en lugar de sobrescribir silenciosamente.
El cambio de nombre de Perl a veces se llama prename
.
El cambio de nombre de Perl versus el cambio de nombre de util-linux
En sistemas similares a Debian, el cambio de nombre de perl parece ser el predeterminado y los comandos anteriores deberían funcionar.
En algunas distribuciones, el rename
La utilidad de util-linux es la predeterminada. Esta utilidad es completamente incompatible con la de Perl. rename
.
-
Todos: Primero, verifique si Perl
rename
está disponible bajo el nombreprename
. -
Debian: El cambio de nombre de Perl debería ser el predeterminado. También está disponible como
prename
. losrename
ejecutable, sin embargo, está bajo el control de/etc/alternatives
y así podría haber sido alterado a algo diferente. -
archlinux: Correr
pacman -S perl-rename
y el comando está disponible comoperl-rename
. Para un nombre más conveniente, cree un alias. (Punta de sombrero: ChiseledAbs) -
Mac OS X Según esta respuesta,
rename
se puede instalar en OSX usando homebrew a través de:brew install rename
-
Descarga directa:
rename
también está disponible en Perl Monks:wget 'http://www.perlmonks.org/?displaytype=displaycode;node_id=303814' -O rename
Reemplazaría todos esos tr
comandos, con un sed
comando de sustitución, por ejemplo:
for file in %N; do
mv "$file" "$(echo "$file" | sed 's/[ _-]//g')"
done
Sin contar mv
, realmente no necesita un proceso externo para esto en absoluto, puede simplemente maricón ellos.
ifsqz() ( LC_ALL=C sqz=$1
isf()
set -- * ; set -f
for f do isf "$f" || break
IFS=$sqz; set -- $f; IFS=
isf "$*" || mv -- "$f" "$*"
done
)
Sin embargo, eso significa un mv
invocación por archivo, y probablemente rename
es mejor. Aunque esto debería funcionar dado solo un POSIX mv
en $PATH
y un shell POSIX.
Entonces, se me ocurrió una especie de demo loca para esto. El conjunto de prueba se genera como:
tee - - - - <0?(i+1):i))"'
printf '%b -_ ---___' $(
IFS=0; eval
printf '"\\%04o\\%04o "' "$(
printf "$n"' "$i" '%s $(
printf %.252d
#END
))"))
CGEN
En primer lugar, seré el primero en reconocer que el comando anterior produce resultados que pueden obtenerse más fácilmente por otros medios. Pero es probable que otros medios no demuestren tan bien lo que se podría hacer con $IFS
y un poco (¿enfermo?) imaginación.
Entonces, el primer bit es bastante sencillo:
-
tee
envía 5 copias de su entrada, el documento llamadoCGEN
-
dd
bloquea su entrada por líneas nuevas a 90 bytes por bloque y canaliza eso a … -
sed
une 2 de esos bloques en dosn
personajes de ewline,'
entre comillas simples los resultados y antepone el stringtouch --
para cada ciclo de línea antes de conectar la tubería a … -
sh
que luego ejecuta todas las entradas como comandos de shell
los #CGEN
aunque un poco … Bueno, brevemente …
-
El fondo
printf
imprime 252 0s -
el siguiente del último recibe 252
''
null-string argumentos y para cada uno imprime el contenido de$n
Seguido por el string" $i "
-
eval
interpreta los argumentos del siguienteprintf
antes de que imprima los resultados de esa interpretación como números octales precedidos por 2 barras diagonales inversas por pieza -
el último
printf
imprime los valores de bytes para esos octales 2 a la vez seguidos por el string-_ ---___
para cada par -
$n
se inicializa en una ecuación que incrementará$i
por uno para cada evaluación, excepto que omite los valores 10, 39 o 47 – (que sonn
ewline,'
comillas simples, y/
barra en decimal ASCII respectivamente)
El resultado final es un directorio que contiene una gran cantidad de nombres de archivo realmente feos que contienen cada byte en mi juego de caracteres de 1 a 255 excepto las comillas simples (solo se omite para evitar uno más sed s///
declaración) y el /
barra oblicua. Esos nombres de archivo se ven así:
(set -- *; printf '%snn##############nn%sn' "$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 -_ ---___$
Ahora obtendré algunos datos sobre estos archivos:
chksqz() ( LC_ALL=C sqz=$1
set -- * ; set -f ; IFS= ; tc="$*"
printf '#%sn'
"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#%sn#Total:t%dn#Other:t%dn#'$sqz':t%dn"
"And to confirm these figures:"
$( printf %s * | wc -c
printf %s * | tr -d "$sqz" | wc -c
printf %s * | tr -dc "$sqz" | wc -c
))
chksqz '_ -'
PRODUCCIÓN
#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
Está bien. Ahora, finalmente, a la acción:
ifsqz '_ -'
chksqz '_ -'
PRODUCCIÓN
#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
¡Éxito! Puedes verlo por ti mismo:
ls
????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
???????????????????????????
???????????????????????????
???????????????????????????
????????????????????????????
????????????????????????????
????????????????
??????????????????????
????????????????????????
??????????????????????????
??????????????????????????
??????????????????????????
??????????????????????????
???????????????????????????
???????????????????????????
???????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
??????????????????????????
????????????????????????
????????????????????
??????????????????
????????????????????????????
??
????????????????????????????
??????????????????????????
????????????????????????????
????????????????????????????
????????????????????!!""##
??????????????????!!""##$$
????????????????!!""##$$%%
????????????!!""##$$%%&&((
????????!!""??##$$%%&&(())
$$%%&&(())**??++,,..0011
%%&&(())**++??,,..00112233
&&(())**++,,??..0011223344
))**++,,..??0011223344556
**++,,..00??11223344556677
22334455667788??99::;;<<==>>
445566778899??::;;<<==>>[email protected]@
5566778899::;;??<<==>>[email protected]@AA
6778899::;;<?==>>[email protected]@AABB
8899::;;<<==??>>[email protected]@AABBCCDD
\]]^^``aa??bbccddeeffgghh
]]^^``aabbc??cddeeffgghhii
^^``aabbccdd??eeffgghhiijj
[email protected]@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
Si te gusta la programación, puedes dejar una crónica acerca de qué te ha parecido esta noticia.