하위 디렉터리가 이미 존재하지 않으면 실패하는 Unix 명령이 많이 있습니다. 이러한 명령을 진행하기 전에 누락된 하위 디렉터리를 생성하는 것은 사소한 문제일지라도 말입니다.
예를 들면 다음과 같습니다 touch
.
% touch /tmp/foo/bar/baz/frobozz
touch: cannot touch `/tmp/foo/bar/baz': No such file or directory
% mkdir -p /tmp/foo/bar/baz
% touch /tmp/foo/bar/baz/frobozz # succeeds
마찬가지로, 다음의 경우에도 마찬가지입니다 mv
.
% mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz
% mv: failed to access `/tmp/foo/frotz/quux': No such file or directory
% mkdir -p /tmp/foo/frotz/quux
% mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz # succeeds
이 동작에 대한 주목할만한 예외 중 하나는 플래그 mkdir
자체 -p
에 "필요에 따라 하위 디렉터리를 생성"하라는 것입니다.
touch
나는 ,, mv
et al. 이라는 사실에 약간 의아해합니다 . 기본적으로 또는 일부 플래그(예: mkdir
's -p
)를 통해 요청 시 "명백한 작업"을 수행하지 않습니다.
여기에는 아주 타당한 이유가 있을 것이라고 생각하지만, 나에게는 분명하지 않습니다. 통찰력을 환영합니다.
(이 질문을 하는 동기는 (비표준) 유틸리티와 거의 유사한 유틸리티를 구현하고 싶다는 것입니다 mmv
. 단, 실제 유틸리티와는 mmv
반대로~일 것이다"필요에 따라 하위 디렉터리를 만듭니다." 그리고 이 새로운 기능이 정말 나쁜 아이디어인지 궁금합니다.
예를 들어, 제가 생각하고 있는 유틸리티(제가 부르겠습니다 mmmv
)를 사용하면 파일을 이동하고 이름을 동시에 바꿀 수 있습니다.
1caf73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f37fd8ce865f98579d10d8045ac1e88c6717215
73f2af84ba8ed27fa332d52745274377aa67cda5
a257a7c7cac26c391e8636193ff47b45c5e587ec
에게
1c/af73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f/37fd8ce865f98579d10d8045ac1e88c6717215
a2/57a7c7cac26c391e8636193ff47b45c5e587ec
73/f2af84ba8ed27fa332d52745274377aa67cda5
다음과 같은 단일 명령으로:
% mmmv '??*' '#1#2/#3'
이것이 가능하려면 mmmv
필요에 따라 두 글자 이름의 하위 디렉터리를 만들 수 있어야 합니다.)
답변1
일반적으로 유틸리티가 이 작업을 수행하지 않는 이유는 예상하지 못한 작업이고 그렇게 하면 보안에 영향을 미칠 수 있기 때문입니다.
/foo
예를 들어, 모드 700
( )를 사용 하는 비공개 디렉터리가 있다고 가정해 보겠습니다 rwx------
. 존재 touch /foo/bar
하지 않는 경우 잠재적으로 기본값 ( ) /foo
을 사용하여 생성됩니다 . 하지만 비공개로 설정되어 있었고 일반적으로 비공개로 만들고 만드는 것은 그렇게 하지 않습니다. 그리고 방금 생성된 내용을 모르기 때문에 직접 조정해야 한다는 사실도 알 수 없습니다.755
rwxr-xr-x
/foo
/foo
/foo