Касающая проблема: создание имени файла из 2 переменных

Я пытаюсь создать имя файла из 2 переменных.

Это ошибка msg:

touch: cannot touch `/root/tinstalls/2--06/06/15': No such file or directory 2--06/06/15 19:54 

Это код:

 tdate=$(date '+%D %R') tfile=$(echo "${toadd}--${tdate}") touch /root/tinstalls/${tfile} echo $tfile 

Каталог есть.

@ Theophrastus имеет правильную идею. Согласно POSIX «[t] символы, составляющие имя [файла], могут быть выбраны из набора всех значений символа, за исключением символа косой черты и нулевого байта» (мой акцент). Другими словами, каждая строка между двумя слэшами ( кроме пустой строки ) является другой директорией, и вы не можете создать файл с именем, содержащим слэши. Поэтому, когда вы пытаетесь touch /root/tinstalls/2--06/06/15 , система пытается создать файл 15 внутри каталога с абсолютным путем /root/tinstalls/2--06/06 .

Простым способом изменить это было бы заменить все слэши в имени файла, например, с помощью подчеркивания:

 touch "/root/tinstalls/${tfile//\//_}" 

touch не может создавать каталоги. Например, см. Здесь

Я вижу, что у вас есть «Каталог есть». но вы понимаете, что ваш формат даты включает символы «/», которые потребуют больше каталогов, да?

Как уже объясняли другие, проблема в том, что слэши в вашей date touch к созданию каталога. Поскольку он не может, он жалуется. Самое простое решение – изменить формат даты. Вместо этого:

 $ date '+%D %R' 06/07/15 13:47 

Использовать это:

  $ date '+%F %R' 2015-06-07 13:52 

Или, еще лучше, избегайте иметь дело с пробелами и используйте это:

 $ date '+%F-%R' 2015-06-07-13:52 

Наконец, если вы настаиваете на наличии пробелов, вы должны процитировать это имя при его передаче

 touch /root/tinstalls/"${toadd}--$(date '+%F %R')" 

@ Theophrastus имеет правильную идею. Согласно POSIX «[t] символы, составляющие имя [файла], могут быть выбраны из набора всех значений символа, за исключением символа косой черты и нулевого байта» (мой акцент). Другими словами, каждая строка между двумя слэшами (кроме пустой строки) является другой директорией, и вы не можете создать файл с именем, содержащим слэши. Поэтому, когда вы пытаетесь коснуться / root / tinstalls / 2–06 / 06/15, система пытается создать файл 15 внутри каталога с абсолютным путем / root / tinstalls / 2–06 / 06.

Простым способом изменить это было бы заменить все слэши в имени файла, например, с помощью подчеркивания:

 touch "/root/tinstalls/${tfile//\//_}"