파일 및 상위 디렉토리 작성


19

touch명령이 파일을 생성 한다는 것을 알고 있습니다.

touch test1.txt

그러나 어떻게 파일과 전체 경로를 만들 수 있습니까?

예를 들어 내 데스크탑에는 아무것도 포함되어 있지 않습니다.

~/Desktop/$ ls
~/Desktop/$

에서 1.txt를 만들고 싶습니다 ~/Desktop/a/b/c/d/e/f/g/h/1.txt. 다음과 같은 간단한 명령 으로이 작업을 수행 할 수 있습니까?

$ touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

전체 경로를 수동으로 만든 다음 파일을 만드는 대신?

답변:


23

touch디렉토리를 만들 수 없으므로 필요 mkdir합니다.

그러나 전체 디렉토리 구조를 작성하는 mkdir유용한 -p/ --parents옵션이 있습니다.

보낸 사람 man mkdir:

   -p, --parents
          no error if existing, make parent directories as needed

따라서 특정 상황에서 필요한 명령은 다음과 같습니다.

mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

더 자주 필요하다고 생각하고 매번 경로를 두 번 입력하고 싶지 않다면 Bash 함수 또는 스크립트를 만들 수도 있습니다.

  • 배쉬 기능 (이 줄을 사용자 ~/.bashrc가 persitently하게 사용할 수 있도록 추가하십시오. 그렇지 않으면 터미널을 종료하면 다시 사라집니다) :

    touch2() { mkdir -p "$(dirname "$1")" && touch "$1" ; }
    

    다음과 같이 간단하게 사용할 수 있습니다.

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    
  • 배쉬 스크립트 ( /usr/local/bin/touch2모든 사용자가 사용할 수 있도록 sudo를 사용하여 저장하고 다른 ~/bin/touch2사용자 만 사용 가능) :

    #!/bin/bash
    mkdir -p "$(dirname "$1")" &&
        touch "$1"
    

    를 사용하여 스크립트를 실행 가능하게하는 것을 잊지 마십시오 chmod +x /PATH/TO/touch2.

    그 후 다음과 같이 실행할 수도 있습니다.

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    

원래 touch 명령을 편집 하고 스위치 -p를 추가 할 수 있습니까?
MA Heshmat Khah

3
@HeshmatKhah 가능해야하지만 자체 스크립트 나 함수로 시스템 실행 파일을 섀도 잉하는 것은 권장되지 않습니다. "p"를 선호하는 경우 이름 touch-p대신 (공백 없음!)을 사용할 수 touch2있지만 원래 명령을 바꾸려고하지는 않습니다.
바이트 사령관

1
참고 대신의 접미사 제거 사용할 수있는 dirname뿐만 아니라를, 당신이 할 수있는, 즉 mkdir -p "${1%/}" && touch "$1"동일하게, askubuntu.com/a/928544/295286
세르지 Kolodyazhnyy

7

플래그 install와 함께 명령을 사용할 수 있습니다 -D.

bash-4.3$ install -D /dev/null mydir/one/two

bash-4.3$ tree mydir
mydir
└── one
    └── two

1 directory, 1 file
bash-4.3$ 

파일이 여러 개인 경우 항목 목록 (공백이있는 항목을 인용해야 함)을 사용하고 반복하는 것을 고려할 수 있습니다.

bash-4.3$ for i in mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} ; do 
> install -D /dev/null "$i"
> done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

또는 대안으로 배열 :

bash-4.3$ arr=( mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} )
bash-4.3$ for i in "${arr[@]}"; do  install -D /dev/null "$i"; done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

이 방법으로 새 ​​파일은 기본적으로 실행 권한을 얻습니다. 터치와 동일한 권한을 부여하기 위해 다음을 사용할 수 있습니다.install -m 644 -D /dev/null <filepath>
ricab

1

이를 위해 아래 예와 같이 고유 한 기능을 만들 수 있습니다.

$ echo 'mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" ;  }' >> ~/.bashrc
$ source ~/.bashrc
$ mkfile ./fldr1/fldr2/file.txt

먼저 echo 명령을 사용하여 ~ / .bashrc 파일의 끝에 함수를 삽입합니다. 함수의 -p 플래그를 사용하면 예제에서 fldr2와 같은 중첩 된 폴더를 만들 수 있습니다. 마지막으로 소스 명령으로 파일을 업데이트하고 최근에 생성 된 mkfile 명령을 실행합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.