mkdir -p
디렉토리를 생성합니다; 또한 필요에 따라 부모 디렉토리를 만듭니다.
파일에 대해 비슷한 명령이 존재합니까? 필요한 경우 파일과 상위 디렉토리를 작성합니까?
mkdir -p
디렉토리를 생성합니다; 또한 필요에 따라 부모 디렉토리를 만듭니다.
파일에 대해 비슷한 명령이 존재합니까? 필요한 경우 파일과 상위 디렉토리를 작성합니까?
답변:
소스 파일이 주어진 경우 설치가이를 수행합니다 /dev/null
. 이 -D
인수는 모든 상위 디렉토리를 작성한다고 말합니다.
anthony@Zia:~$ install -D /dev/null /tmp/a/b/c
anthony@Zia:~$ ls -l /tmp/a/b/c
-rwxr-xr-x 1 anthony anthony 0 Jan 30 10:31 /tmp/a/b/c
버그인지 아닌지 확실하지 않습니다. 맨 페이지에는 장치 파일에 대한 동작이 언급되어 있지 않습니다. mktemp
소스로 빈 파일 ( 예 :로 새로 만든 파일)을 제공 할 수도 있습니다 .
나는 종종 이런 종류의 상황에 부딪 쳤으므로 단순히 .bashrc
파일에 함수를 작성했습니다 . 이렇게 생겼어요
function create() {
arg=$1
num_of_dirs=$(grep -o "/" <<< $arg | wc -l)
make_dirs=$(echo $arg | cut -d / -f1-$num_of_dirs)
mkdir -p $make_dirs && touch $arg
}
따라서 존재하지 않는 디렉토리의 경로 안에 파일을 만들려면 말할 것입니다.
create what/is/it # will create dirs 'what' and 'is', with file 'it' inside 'is'
touchp
처럼mkdir -p
변수를 별도로 설정하면 변수를 변경하고 기록에서 명령을 매우 쉽게 실행할 수 있지만 한 줄에 유지하면서 제안하려고했습니다.
B="./make/this/path" && mkdir -p -- "$B" && touch -- "$B/file.txt"
"가짜"가 가능합니다.
롭 그리피스는 자격이 2007 년에 기사를 게시 쉽게 새로운 폴더를 많이 만들기 그가 사용하는 논의에있어서 Macworld.com에 xargs
사용하여 디렉토리를 만들 수있는 파일 목록에서 읽을 명령을mkdir
.
xargs
에 전달 된 각 인수의 값을 포함하는 플래그 로 placeholder
( {}
) 를 참조 할 수 -I
있습니다 xargs
. 다음은 해당 플래그를 사용하거나 사용하지 않는 차이점입니다.
$ foo.txt bar.txt | xargs echo
$ => foo.txt bar.txt
$ foo.txt bar.txt | xargs -I {} echo {}
$ => foo.txt
$ => bar.txt
xargs
또한 sh -c
플래그를 사용하여 임의의 쉘 명령을 실행할 수 있습니다 .
foo.txt bar.txt | xargs sh -c 'echo arbitrary command!'
우리는 이러한 개념을 결합 할 수 있습니다 mkdir -p
대신 mkdir
하고있는 개념 @ldx 의 대답 이 생산 :
$ cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
이 명령은 기본적으로 파일의 라인으로 구분 된 목록에있는 각 파일 이름을 매핑 파일의 일부가 떨어져 갈비와 디렉토리를 생성 mkdir -p
한 후touch
해당 파일을 해당 디렉토리에 표시합니다.
예를 들어 내 files.txt
모습이 다음과 같다고 가정 해보십시오 .
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
cat files.txt
생산 deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
에 파이프 xargs
-I {}
, xargs
우리가 지금 그래서, 그것을 자신의 명령에 각 인수를 변환합니다 :
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
&&
콤비 네이터를 사용하여 순차적으로 실행되는 3 개의 명령을 그룹화 하는 셸 명령을 실행합니다. 첫 번째 명령은 이전에 등록한 자리 표시자를 사용하여 파일을 환경 변수 (다음 파일 패스에서 재 사용됨)에 저장합니다. 있다:
f=deeply/nested/foo/bar.txt
f=deeply/nested/baz/fiz.txt
mkdir -p
있지만 파일 이름을 잘라 내야합니다. 다음을 사용하여 충분히 간단합니다 '${f%/*}'
.
mkdir -p deeply/nested/foo/
mkdir -p deeply/nested/baz/
f
할 때 변수 전체를 다시 참조하십시오 touch
.
touch deeply/nested/foo/bar.txt
touch deeply/nested/baz/fiz.txt
cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
UUOC가있는 것에 대한 모든 설명 이 있습니다. 그러면 while read
루프가 더 의미가 있을 때 xargs로 서브 쉘을 쉘에 다시 넣습니다.
while read f; do mkdir -p "$(dirname "$f")"; touch "$f"; done < files.txt
. UUOC에 대해 10 초 인터넷 검색을 할 수 없다는 사실도 알려줍니다