sudo rm -rf 디렉토리/*는 일부 권한 설정에서는 작동하지 않습니다.

sudo rm -rf 디렉토리/*는 일부 권한 설정에서는 작동하지 않습니다.

/var/opt/gitlab/backups다음 권한을 가진 디렉터리가 있습니다.

[user@localhost ~]$ sudo ls -la /var/opt/gitlab/backups
total 1316296
drwx------.  2 git  root         63 1月  21 21:44 .
drwxr-xr-x. 21 root root       4096 1月  21 21:39 ..
-rw-------.  1 git  git  1347880960 1月  21 21:44 1642819457_2022_01_21_14.1.2-ee_gitlab_backup.tar

이제 다음 명령은 아무것도 삭제하지 않습니다

sudo rm -rf /var/opt/gitlab/backups/*

다음 명령은 디렉토리와 그 안의 모든 것을 삭제합니다.

sudo rm -rf /var/opt/gitlab/backups/

또한 다음 명령은 특정 파일을 삭제합니다

sudo rm -rf /var/opt/gitlab/backups/1642819457_2022_01_21_14.1.2-ee_gitlab_backup.tar

파일 와일드카드 방식이 작동하지 않습니다(불행히도 그것이 제가 원하는 것입니다)

하지만 내가 원하는 것은 디렉토리를 삭제하지 않고 내부의 파일만 삭제하는 것입니다. 권한 설정 때문인 것 같지만 권한 변경은 나에게 옵션이 아닙니다. 디렉토리 소유자 및 권한은 타사 소프트웨어에 의해 자동으로 설정되므로 이를 혼동하고 싶지 않습니다.

"디렉터리의 모든 파일을 삭제하지만 디렉터리 자체는 삭제하지 않는" 효과를 얻을 수 있는 방법이 있습니까?

답변1

와일드카드는 쉘에 의해 확장됩니다. ~을 위한

rm /var/opt/gitlab/backups/*

작업하려면 나열된 콘텐츠에 대한 권한이 있어야 합니다 /var/opt/gitlab/backups/. 예를 들어, 루트가 아닌 사용자로 다음 명령을 실행하는 것을 고려해 보십시오.

$ echo /var/*
/var/cache /var/db /var/empty /var/lib /var/lock /var/log /var/mail /var/run /var/spool /var/svc.d /var/tmp

그러면 쉘은 *해당 디렉토리에 숨겨져 있지 않은 파일 목록을 확장하고 echo해당 값을 인쇄합니다.

그러나 액세스할 수 없는 디렉토리에 대해 동일한 작업을 수행하려고 하면 다음과 같습니다.

$ echo /root/*
/root/*

셸에는 콘텐츠를 열거할 수 있는 권한이 없으므로 확장할 수 없습니다 *.

정말로 와일드카드를 사용해야 한다면 다음을 시도해 볼 수 있습니다.

$ sudo /bin/sh -c 'rm -rf /var/opt/gitlab/backups/*'

이 방법으로 /bin/sh새로운 쉘( )을 루트로 실행할 수 있습니다. 쉘은 디렉토리의 내용을 읽을 수 있는 권한을 가지며 *디렉토리로 확장할 수 있습니다.

관련 정보