Из Parent_dir
:
for d in */*/; do f=${d/\//_}; touch -- "$d"/"${f::-1}.txt"; done
Обратите внимание, что touch
изменит временную метку любого существующего файла.
Вы можете сделать пробный запуск, заменив touch
на echo
:
for d in */*/; do f=${d/\//_}; echo -- "$d"/"${f::-1}.txt"; done
for d in */*/
позволяет нам итерировать каталоги на два уровня вглубь
f=${d/\//_}
заменяет разделитель первого каталога /
на _
и сохраняет вывод как переменную f
"$d"/"${f::-1}. txt"
расширяется до имени каталога, за которым следует нужное имя файла; ${f:: -1}
вычеркивает последний /
из переменной f
Обратите внимание, что, поскольку разделитель каталогов /
присутствует в переменной d
, /
в "$d"/"${f::-1}. txt"
является лишним; поскольку почти все системы воспринимают //
как одиночные /
, это не должно быть проблемой. В качестве альтернативы вы можете капать /
:
for d in */*/; do f=${d/\//_}; touch -- "${d}${f::-1}.txt"; done