나는 다음의 스크립트를 사용합니다.심볼릭 링크로 지정되지 않는 한 디렉토리 삭제
스크립트를 사용하여 디렉토리를 삭제하기 전에 디렉토리의 액세스 권한과 가용성을 어떻게 확인할 수 있습니까? 경우에 따라 호스트 중 하나에서 dir을 사용하지 못할 수도 있습니다. 삭제하기 전에 디렉터리의 가용성과 액세스 권한을 확인해야 합니다. 그것이 내가 시도한 것입니다.
dirrm ()
{
for topdir in /dir1 /dir2; do
for dirpath in "$topdir"/main/app/*/; do
if [ -e "$dirpath/log.xml" ] && ! [ "$dirpath" -ef "$topdir"/ln/app ]
then
printf 'Would remove "%s"\n' "$dirpath"
# rm -rf "$dirpath"
fi
done
done
}
if ! test /dir1/
then
printf 'No access to dir1\n'
else
dirrm
fi
감사해요
답변1
"$topdir"/main/app/*/
전역을 확장하려면 다음이 필요합니다.
- 액세스 검색
$topdir/
(다음을[ -x "$topdir/" ]
사용하여 확인할 수 있습니다. - 검색 액세스
"$topdir"/main/
. - 검색 및 읽기
"$topdir"/main/app/
액세스 - 기호 링크에 있는 파일의 경우
"$topdir"/main/app
기호 링크의 최종 대상에 도달하기 위해 통과해야 하는 모든 디렉토리에 대한 검색 액세스도 필요합니다.
이를 확인하려면 동일한 파일에 대한 두 개의 경로가 "$dirpath/log.xml
있으며 "$topdir"/ln/app
액세스 권한을 검색해야 하며 "$topdir"/ln
디렉터리를 순회해야 합니다(심볼릭 링크인 경우).
이를 수행하려면 rm -rf "$topdir"/main/app/some-subdir/
먼저 some-subdir
심볼릭 링크인 경우 링크가 가리키는 디렉토리를 비우고 구현에 따라 심볼릭 링크 자체 또는 링크된 디렉토리를 삭제할 수도 있고 삭제하지 않을 수도 있다는 점에 유의하세요 rm
.
어떤 경우든 "$topdir"/main/app
쓰기 권한이 필요하며, some-subdir
비어 있지 않은 경우 해당 항목에 대한 검색, 읽기, 쓰기 권한도 필요합니다(그리고 비어 있지 않은 하위 디렉터리에 대해서도 반복적으로). 또한 t
드릴 비트로 인해 복잡성이 추가될 수 있습니다.
읽기, 쓰기, 검색 권한이 필요하므로 "$topdir"/main/app/
다음을 추가하세요.
dirrm ()
{
for topdir in /dir1 /dir2; do
appdir="$topdir/main/app/"
if [ ! -w "$appdir" ] || [ ! -r "$appdir" ] || [ ! -x "$appdir" ]; then
printf >&2 '%s\n' "I don't have the necessary access to $appdir"
return 1
fi
...
좋은 시작이 될 것입니다.