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 이상이 필요합니다.printf
bash
date
bash
#!/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
유틸리티가 호출됩니다 . 내장 유틸리티이므로 모든 파일 이름으로 유틸리티를 호출하는 데 문제가 없습니다.xargs
printf
printf
printf
쉘 에서 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
위의 내용은 zsh
s 루프를 사용하는 방법 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의 다양한 명령에 사용될 수 있으며 다양한 방식으로 작업할 수 있으므로 실제로 배우고 이해하는 데 시간을 투자해야 합니다.