touch, mv 등이 "필요에 따라" 하위 디렉토리를 생성하지 않는 이유

touch, mv 등이 "필요에 따라" 하위 디렉토리를 생성하지 않는 이유

하위 디렉터리가 이미 존재하지 않으면 실패하는 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나는 ,, mvet 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을 사용하여 생성됩니다 . 하지만 비공개로 설정되어 있었고 일반적으로 비공개로 만들고 만드는 것은 그렇게 하지 않습니다. 그리고 방금 생성된 내용을 모르기 때문에 직접 조정해야 한다는 사실도 알 수 없습니다.755rwxr-xr-x/foo/foo/foo

관련 정보