Здесь используется cut для извлечения имени файла из вывода file | grep ASCII
, а затем направляет его в xargs stat -c ...
для отображения только имени файла и размера:
find . -type f -exec file {} + | grep ASCII | cut -d: -f1 | xargs -d'\n' -r stat -c '%n %s'
Если вам нужен размер перед именем файла, используйте '% s % n '
в команде stat
.
Он справится с именами файлов, содержащими любые символы, кроме :
или новой строки. Он предполагает систему GNU (для -d
и этот синтаксис stat
). Это может дать ложные срабатывания, если в пути к файлу присутствует ASCII
.
Necesitas
touch "${toto}hihi.log"
El problema es que el shell no puede saber sin las llaves cuántos caracteres forman parte del nombre de la variable. Por lo tanto, trata todos los caracteres legales como parte del nombre. En este caso eso es todo antes del .
; es decir, el shell usa la variable no -existente $totohihi
.
En general, ayuda usar la opción de shell -x
para ver qué está pasando:
set -x
touch "$totohihi.log"
+ touch.log
$totohihi.log
significa variable con nombretotohihi
para que funcione, usa
${toto}hihi.log
Lo hace, expande $totohihi
a la cadena vacía y luego ejecutatouch ".log"
(suponiendo que la variable no se configuró en otro lugar ). Intenta ver lo que dice ls -l.log
.
Como se menciona en las otras respuestas, debe envolver el nombre de la variable entre llaves si los siguientes caracteres pueden ser parte de un nombre de variable, entonces touch "${toto}hihi.log"
. Tenga en cuenta que el guión bajo también es válido en nombres de variables junto con letras y números, por lo que "${toto}_hihi.log"
también necesitaría llaves.
Shell sabe que $toto
es una variable con valor 123456
.
Por lo tanto, dondequiera que encuentre $toto
lo reemplaza con 123456
.
Entonces, en el caso de $toto.hihi.log
, Shell reemplaza $toto
con 123456
ya que .
es como un operador de concatenación y crea un archivo como se esperaba.
Sin embargo, en el caso de $totohihi.log
, Shell no encuentra ninguna variable llamada $totohihi
y, por lo tanto, la reemplaza con una cadena vacía que da como resultado la creación del archivo .log
. Puede encontrarlo con ls -a
o ls.log
ya que los archivos que comienzan con .
son archivos ocultos y no se pueden ver con el comando simple ls
.
En caso de que necesite crear un archivo con el nombre 123456hihi.log
, deberá poner $toto
entre llaves como ${toto}hihi.log
como lo mencionaron otros en respuestas anteriores.