Bash: создание имен файлов в соответствии с именами каталогов

Похоже, что игра использует библиотеку GLUI . К сожалению, Ubuntu не включает эту библиотеку в архивы последних выпусков. Однако он доступен для Precise .

Вы можете попробовать загрузить DEB для своей архитектуры ниже и установить его с помощью dpkg :

Команда:

dpkg -i libglui2c2_2.36-4ubuntu1_*.deb

2
09.04.2017, 06:26
3 ответа
find . -type d -exec sh -c '
   case ${1//[!\/]/} in
      "//" ) f=${1:2}; f=${f/\//_}; :> "$1/$f.txt" ;;
      * ) false ;;
   esac
' {} {} \; -prune

for d in */*/; do
   f=${d/\//_}
   :> "${d%?}/${f%?}.txt"
done
1
27.01.2020, 21:53

Из 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
3
27.01.2020, 21:53

Если вы хотите, чтобы имена файлов имели буквальное название name_date.txt, попробуйте следующее:

#!/bin/bash
for dir in $(find . -maxdepth 2 -mindepth 2 -type d)
do
    touch "$dir"/name_date.txt
done

Если вы хотите, чтобы имена файлов были _. txt, сделайте следующее:

#!/bin/bash
IFS=$'\n'
for dir in $(find . -maxdepth 1 ! -path . -type d)
do
    for subdir in $(find "$dir" -mindepth 1 -type d)
    do
        base_dir=$(basename $dir)
        base_subdir=$(basename $subdir)

        touch "$base_dir"/"$base_subdir"/"$base_dir"_"$base_subdir".txt
    done
done
2
27.01.2020, 21:53

Теги

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