создание файла касанием с использованием переменной

Здесь используется 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 .

1
21.05.2018, 13:04
4 ответа

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 -xpara ver qué está pasando:

set -x
touch "$totohihi.log"
    + touch.log
7
27.01.2020, 23:11

$totohihi.logsignifica variable con nombretotohihi

para que funcione, usa

${toto}hihi.log

Esta respuesta de stackoverflow tiene una buena explicación

1
27.01.2020, 23:11

Lo hace, expande $totohihia 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.

3
27.01.2020, 23:11

Shell sabe que $totoes una variable con valor 123456.
Por lo tanto, dondequiera que encuentre $totolo reemplaza con 123456.
Entonces, en el caso de $toto.hihi.log, Shell reemplaza $totocon 123456ya 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 $totohihiy, por lo tanto, la reemplaza con una cadena vacía que da como resultado la creación del archivo .log. Puede encontrarlo con ls -ao ls.logya 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 $totoentre llaves como ${toto}hihi.logcomo lo mencionaron otros en respuestas anteriores.

-1
27.01.2020, 23:11

Теги

Похожие вопросы