Bash: 디렉터리 이름을 기반으로 파일 이름 만들기

Bash: 디렉터리 이름을 기반으로 파일 이름 만들기

다음과 같은 디렉토리 구조가 있다고 가정 해 봅시다.Parent_dir/<name>/<date>/

Parent_dir삭제된 bash 스크립트를 사용하여 각 하위 디렉터리를 탐색 /<name>/<date>/하고 하위 디렉터리에 이름이 지정된 빈 텍스트 파일을 만들려면 어떻게 해야 합니까 <name>_<date>.txt?/<name>/<date>/

답변1

에서 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

/in은 변수에 디렉터리 구분 기호가 있기 때문에 중복된다는 d점에 유의하세요 . 거의 모든 시스템이 단일을 사용하기 때문에 이는 문제가 되지 않습니다. 또는 다음을 수행할 수 있습니다 ./"$d"/"${f::-1}.txt"////

for d in */*/; do f=${d/\//_}; touch -- "${d}${f::-1}.txt"; done

답변2

파일 이름을 리터럴로 만들고 싶다면 name_date.txt다음을 시도해 보세요.

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

파일 이름을 로 지정하려면 <name>_<date>.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

답변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

관련 정보