임시 디렉터리를 만들려면 어떻게 해야 합니까?
을(를) 만들곤 합니다.tempfile
를 삭제하고 디렉토리로 다시 만듭니다.
temp=`tempfile`
rm -f $temp
# <breakpoint>
mkdir $temp
문제는 <breakpoint>까지 실행될 때, 같은 작업을 수행하려는 다른 프로그램이 있다는 것입니다. 같은 이름의 tempdir를 mkdir-ed하면 이 프로그램이 실패할 수 있습니다.
를 사용합니다. 임의 이름으로 임시 디렉터리를 만들고 해당 파일이 이미 존재하지 않는지 확인합니다.그러나 디렉토리를 사용한 후에는 삭제해야 합니다.
보다 강력한 솔루션을 위해 다음과 같은 방법을 사용합니다.이렇게 하면 스크립트가 종료된 후 temp dir가 항상 삭제됩니다.
정리 기능은 다음에서 실행됩니다.EXIT
신호.이렇게 하면 스크립트가 중단되더라도 항상 정리 함수를 호출할 수 있습니다.
#!/bin/bash
# the directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# the temp directory used, within $DIR
# omit the -p parameter to create a temporal directory in the default location
WORK_DIR=`mktemp -d -p "$DIR"`
# check if tmp dir was created
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
echo "Could not create temp dir"
exit 1
fi
# deletes the temp directory
function cleanup {
rm -rf "$WORK_DIR"
echo "Deleted temp working directory $WORK_DIR"
}
# register the cleanup function to be called on the EXIT signal
trap cleanup EXIT
# implementation of script starts here
...
여기서 bash 스크립트의 디렉터리입니다.
배쉬 트랩이요
제가 제일 좋아하는 원라이너는요.
cd $(mktemp -d)
다음 스니펫은 임시 디렉터리를 안전하게 만든 다음 정리합니다.
첫 번째는요trap
라인이 실행됩니다.exit 1
지정된 신호 중 하나가 수신 시 명령을 실행합니다.두 번째는요trap
선은 다음을 제거합니다.$TEMPD
프로그램 종료 시(정상 및 비정상 모두)에 표시됩니다.이 트랩을 초기화하려면 다음 사항을 확인해야 합니다.mkdir -d
다음을 사용하여 실수로 종료 트랩을 실행하는 것을 방지했습니다.$TEMPD
알 수 없는 상태에 있습니다.
#!/bin/bash
# set -x # un-comment to see what's going on when you run the script
# Create a temporary directory and store its name in a variable.
TEMPD=$(mktemp -d)
# Exit if the temp directory wasn't created successfully.
if [ ! -e "$TEMPD" ]; then
>&2 echo "Failed to create temp directory"
exit 1
fi
# Make sure the temp directory gets removed on script exit.
trap "exit 1" HUP INT PIPE QUIT TERM
trap 'rm -rf "$TEMPD"' EXIT
다음은 템플릿을 사용하여 temp dir를 생성하는 방법에 대한 간단한 설명입니다.
- 임시 파일 또는 디렉터리를 안전하게 생성하고 이름을 인쇄합니다.
- TEMPLATE은(는) 마지막 구성 요소에 3개 이상의 연속된 'X'를 포함해야 합니다.
- TEMPLATE을 지정하지 않으면 tmp를 사용합니다.XXXXXXXXXXXXX입니다.
- 생성된 디렉토리는 u+rwx에서 umask 제한을 뺀 것입니다.
PARENT_DIR=./temp_dirs # (optional) specify a dir for your tempdirs
mkdir $PARENT_DIR
TEMPLATE_PREFIX='tmp' # prefix of your new tempdir template
TEMPLATE_RANDOM='XXXX' # Increase the Xs for more random characters
TEMPLATE=${PARENT_DIR}/${TEMPLATE_PREFIX}.${TEMPLATE_RANDOM}
# create the tempdir using your custom $TEMPLATE, which may include
# a path such as a parent dir, and assign the new path to a var
NEW_TEMP_DIR_PATH=$(mktemp -d $TEMPLATE)
echo $NEW_TEMP_DIR_PATH
# create the tempdir in parent dir, using default template
# 'tmp.XXXXXXXXXX' and assign the new path to a var
NEW_TEMP_DIR_PATH=$(mktemp -p $PARENT_DIR)
echo $NEW_TEMP_DIR_PATH
# create a tempdir in your systems default tmp path e.g. /tmp
# using the default template 'tmp.XXXXXXXXXX' and assign path to var
NEW_TEMP_DIR_PATH=$(mktemp -d)
echo $NEW_TEMP_DIR_PATH
# Do whatever you want with your generated temp dir and var holding its path
다음과 같은 기능이 필요합니다.
- 재사용할 수 있도록 모든 임시 파일을 특정 네임스페이스가 있는 단일 디렉터리에 넣습니다.
- 파일 이름 접두사 및 접미사(확장자)를 사용하여 임시 파일을 만듭니다.
와 함께bash
macOS에서 스크립트를 실행합니다.
$ namespace="com.namespace.mktemp"
# find directory for reusing
$ ls -d "${TMPDIR}${namespace}"*
# create directory if not exists
$ mktemp -d -t "$namespace"
/var/folders/s_/.../T/com.namespace.mktemp.HjqGT6w2
# create tempfile with directory name and file prefix
$ mktemp -t "com.namespace.mktemp.HjqGT6w2/file-prefix"
/var/folders/s_/.../T/com.namespace.mktemp.HjqGT6w2/file-prefix.sZDvjo14
# add suffix - `mktemp` on macOS does not support `--suffix`
mv "/var/folders/s_/.../file-prefix.sZDvjo14" "/var/folders/s_/.../file-prefix.sZDvjo14.txt"
그gmktemp
(brew install coreutils
)는 조금 다릅니다.
- 지원합니다.
--suffix
그리고.--tmpdir
- X는 다음 항목에 필요합니다.
template
그리고.prefix
template
디렉터리를 포함할 수 없습니다. 설정TMPDIR
대신
$ namespace="com.namespace.gmktemp"
# create directory if not exists
$ gmktemp -d -t "$namespace.XXXXXXXX"
/var/folders/s_/.../T/com.namespace.gmktemp.BjFtIAyZ
# set TMPDIR
TMPDIR="/var/folders/s_/.../T/com.namespace.gmktemp.BjFtIAyZ"
# create tempfile with directory name and file prefix
$ gmktemp --suffix=".txt" -t "prefix.XXXXXXXX"
/var/folders/s_/.../T/com.namespace.gmktemp.BjFtIAyZ/prefix.LWHj0G95.txt
언급URL : https://stackoverflow.com/questions/4632028/how-to-create-a-temporary-directory 입니다.
'programing' 카테고리의 다른 글
Git 커밋 후크를 건너뜁니다. (0) | 2023.04.25 |
---|---|
인증 에이전트에 대한 연결을 열 수 없습니다. (0) | 2023.04.25 |
원격 분기를 '연결'합니다. (0) | 2023.04.25 |
Windows 10의 IIS 관리자입니다. (0) | 2023.04.25 |
bash에 임시 파일을 만드는 중입니다. (0) | 2023.04.25 |