쉘 스크립트에서 파일 생성 [닫기]

쉘 스크립트에서 파일 생성 [닫기]

Test1YYYYMMDDHHMM1.txt, Test1YYYYMMDDHHMM2.txt, Test1YYYYMMDDHHMM3.txt, ..., 형식으로 100개의 파일을 생성하는 방법은 무엇입니까 Test1YYYYMMDDHHMM100.txt? 파일은 쉘 스크립트의 변수 디렉토리에 기록됩니다.

답변1

YYYYMMDDHHMM현재 연도, 월, 일, 시, 분이어야 한다고 가정하고 필요한 파일을 이식 가능하게 생성하려면 셸에서 루프를 사용할 수 있습니다.

#!/bin/sh

destdir=${1:-.}

cd "$destdir" || exit 1

now=$( date +%Y%m%d%H%M )

i=0
while [ "$i" -lt 100 ]; do
    i=$(( i + 1 ))
    touch "Test1$now$i.txt"
done

cd "$destdir" || exit 1현재 디렉터리를 디렉터리 경로 $destdir에서 참조하는 디렉터리 로 변경 하거나 이것이 가능하지 않은 경우 스크립트를 종료합니다. 이 destdir변수는 스크립트 명령줄의 첫 번째 인수 또는 인수가 지정되지 않은 경우 .현재 디렉터리에서 값을 가져옵니다. 그 안에 파일을 만들려면 ~/somedir이 스크립트를 ./script ~/somedir.

now필요한 타임스탬프의 문자열 표현으로 값을 설정하여 시작하세요 . 그런 다음 100번 반복하고 touch타임스탬프 및 카운터 변수와 함께 명령을 사용하여 파일을 생성합니다 i.


셸 에서는 bash위의 루프를 중괄호 확장으로 바꿀 수 있습니다. 이는 생성된 명령줄의 전체 길이가 너무 길지 않은 한 가능합니다. 너무 길어지면(100개 파일의 경우는 아님) "매개변수 목록이 너무 김" 오류가 발생하고 위의 루프와 유사한 방법을 사용해야 합니다.

%(...)T유틸리티를 호출하는 대신 내장 유틸리티와 함께 ​​특수 형식 문자열을 사용할 수도 있습니다 . 이를 위해서는 버전 4.2 이상이 필요합니다.printfbashdatebash

#!/bin/bash

destdir=${1:-.}

cd "$destdir" || exit 1

printf -v now '%(%Y%m%d%H%M)T' -1

touch "Test1$now"{1..100}.txt

생성해야 하는 경우수천파일에 있는 경우 위의 코드에서는 이 작업을 수행할 수 없습니다.정말 마음에 안 들어요루프(또는 읽을 수 없고 유지 관리할 수 없는 코드를 작성하는 것과 마찬가지로)인 경우 이 xargs명령이 도움이 될 수 있습니다.

#!/bin/bash

destdir=${1:-.}

cd "$destdir" || exit 1

printf -v now '%(%Y%m%d%H%M)T' -1

printf 'Test1%s.txt\n' "$now"{1..100} | xargs touch

그러면 매개변수를 읽고 (한 번에 모두가 아닌) 관리 가능한 배치로 파일을 생성하는 touch유틸리티가 호출됩니다 . 내장 유틸리티이므로 모든 파일 이름으로 유틸리티를 호출하는 데 문제가 없습니다.xargsprintfprintfprintf


쉘 에서 zsh달라지기를 원한다면 다음과 같은 작업을 수행할 수 있습니다.

#!/bin/zsh

destdir=${1:-.}

cd $destdir || exit 1

zmodload zsh/datetime

strftime -s now %Y%m%d%H%M

i=0
repeat 100 touch Test1$now$((++i)).txt

분명히 일반적인 중괄호 확장을 사용할 수도 있지만 zsh위의 내용은 zshs 루프를 사용하는 방법 repeat의 단순화된 변형을 보여줍니다.

답변2

mkdir Test1$(date +%Y%m%d%H%M){1..100}
touch Test1$(date +%Y%m%d%H%M){1..100}.txt

그러면 100개의 디렉토리가 생성되고, 맨페이지에서 날짜를 확인하고, bash에서 중괄호 확장을 확인합니다. 이것이 당신이 여기서 일하는 것들입니다.

touch명령은 동일한 작업을 수행하지만 파일을 생성합니다.

이러한 아이디어는 bash의 다양한 명령에 사용될 수 있으며 다양한 방식으로 작업할 수 있으므로 실제로 배우고 이해하는 데 시간을 투자해야 합니다.

관련 정보