하나의 파일을 만드는 명령이 가능한지 궁금하지만 명령이 실행될 때마다 이전 실행에서 작성된 파일을 덮어 쓰지 않습니다.
예를 들어 : touch test1.txt
이라는 파일 1 개를 만듭니다 test1.txt
. 그러나 다음에 실행할 때 새 파일을 호출 test2.txt
하거나 그와 비슷한 것을 원합니다. 따라서 기존 파일을 덮어 쓰지 않아도됩니다. 어떤 방식으로도 문제없이 여러 번 실행될 수 있습니다.
나를 오해하지 마십시오. 하나의 명령으로 여러 파일을 만들려고하지 않습니다.
미리 감사드립니다!
답변
가장 쉬운 해결책은 파일 이름에 타임 스탬프를 추가하고 한 자리 숫자를 사용하지 않는 것입니다.
빈 파일을 만드는 가장 쉬운 방법은 것 touch test$(date +%Y%m%d-%H%M%S)
그라는 이름의 파일을 초래할 것이다 test20110802-170410
. 두 번째 시간 test*
은 새로운 타임 스탬프를 얻으므로 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
.
분할 메커니즘은 필요에 맞게 조정해야하며 다양한 오류 검사가 추가되어야합니다.
답변
시퀀스 번호가 필요하지 않은 경우 가장 쉬운 방법은 mktemp
명령 을 사용하는 것 입니다.