명령줄: 파일 이름이 이미 존재하는 경우 새 파일 이름으로 파일 생성

명령줄: 파일 이름이 이미 존재하는 경우 새 파일 이름으로 파일 생성

하나의 파일을 생성하는 명령이 가능한지 궁금합니다. 그러나 명령이 실행될 때마다 이전 실행에서 생성된 파일을 덮어쓰지 않습니다.

예를 들어, . touch test1.txt라는 파일 1개를 생성합니다 test1.txt. 하지만 다음에 실행할 때는 새 파일의 이름을 test2.txt, 또는 이와 유사한 것으로 지정하고 싶습니다 . 따라서 기존 파일을 덮어쓰지 않고. 어떤 면에서는 문제 없이 여러 번 실행될 수 있습니다.

오해하지 마세요. 하나의 명령으로 여러 파일을 만들려는 것이 아닙니다.

미리 감사드립니다!

답변1

가장 쉬운 해결책은 파일 이름에 타임스탬프를 추가하고 한 자리 숫자를 사용하지 않는 것입니다.

빈 파일을 만드는 가장 쉬운 방법 touch test$(date +%Y%m%d-%H%M%S)test20110802-170410. 두 번째로 실행하면 test*더 새로운 타임스탬프를 얻게 되므로 파일이 2개가 됩니다.

답변2

이를 수행하는 일반적인 명령이 존재하는지는 의심스럽지만 다음과 같이 생각할 수 있습니다.

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

함수에 대한 입력 매개변수는 접두사, 숫자, 접미사로 분할된 다음 파일이 존재할 때까지 숫자가 증가합니다. 여유 슬롯을 찾았습니다. 파일이 touch.

분할 메커니즘은 필요에 맞게 조정되어야 하며 다양한 오류 검사가 추가되어야 합니다.

답변3

시퀀스 번호가 필요하지 않은 경우 가장 쉬운 방법은 mktemp명령을 사용하는 것입니다.

관련 정보