dir1을 생성하려고 mkdir에게 어떻게 말하고, 존재하지 않는 이름에 도달 할 때까지 이미 존재하는 경우 dir2 등을 만드시겠습니까? 같이 한 줄로 입력해야합니다.

끝에 e.x라는 숫자가있는 디렉토리를 만들고 싶습니다. “dir1″을 입력하고 존재하지 않는 디렉토리 이름에 도달 할 때까지 디렉토리가 이미 존재하는 경우 해당 번호를 증가시키고 Linux 명령 행에서 다음과 같이 한 줄로 입력해야합니다.

mkdir --increment dir$

그 일을 어떻게 하죠?

지금까지 나는 이것을 가지고있다 :

dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi

그러나 다음 dir 이름을 에코합니다. 재귀 적으로 명령을 실행해야합니다.



답변

이것은 사용의 사소한 운동이다. while:

n=0
while ! mkdir dir$n
do
    n=$((n+1))
done

그러나이 사소한 메커니즘이 잘 확장되지 않는다는 것을 깨닫는 데는별로 생각하지 않습니다.

따라서 바퀴를 다시 만들고 모든 모서리를 다시 면도해야하는 대신 템플릿에서 약간 다른 방식으로 고유 한 임시 디렉토리를 만듭니다.

name=$(mktemp -d dirXXXXXXXXXXX)

답변

올바른 순서로 나열된 디렉터리를 점진적으로 만들려면 현재 날짜를 기준으로 이름이 지정된 폴더를 대신 사용해도됩니까?

DATE=$(date +%F)
mkdir "dir-$DATE"

다음과 같은 이름으로 디렉토리를 만듭니다. dir-2014-03-02 ( YYYY-MM-DD, 알파벳 순으로 나타납니다).

하루에 둘 이상의 디렉토리를 작성하는 경우 파일 이름에 현재 시간을 추가 할 수 있습니다. 만나다 man date 출력 형식을 조정하는 방법 date.


답변

먼저 “가장 큰”dirname을 찾아 숫자를 얻고 그 값을 증가시킵니다.

last_dir=(printf "%s\n" dir* | sort -Vr | head -1)
num=$(last_dir#dir)
mkdir "dir$((num+1))"

답변

디렉토리가 항상 “dir1″에서 시작하고 $ dir *이라는 파일이 없다고 가정하면 (이 디렉토리는 모두 순차적으로 번호가 매겨진 디렉토리 임),이 한 개의 라이너로 도망 갈 수 있습니다 –

mkdir ${dir}$(( `ls ${dir}* | wc -w` + 1 ))

이것은 $ dir으로 시작하는 파일의 수를 세어 그 번호에 하나를 더하고 새 파일을 만듭니다.


답변

다른 답변에 대한 부록 : 이름으로 올바르게 정렬하려면 dir이 필요한 경우 고정 길이로 앞에 오는 0으로 새 디렉토리 번호 (NUM)를 채울 수도 있습니다.

다음은 하나의 라인에 응축되거나 다른 솔루션 중 하나에 내장 될 수 있습니다.

NUM="00"$NUM                  ## Left zero pad with fixed length - 1 zeros
NUM=${NUM:((${#NUM} - 3)):3}  ## left trim to fixed length (3 in this case)

이것은 NUM이 적어도 1 자리 길이로 시작하고 고정 길이를 초과하지 않는다고 가정합니다. 요구 사항에 따라 조정하십시오.