권한이 거부되면 에코됩니다.

권한이 거부되면 에코됩니다.

나는 다음의 스크립트를 사용합니다.심볼릭 링크로 지정되지 않는 한 디렉토리 삭제

스크립트를 사용하여 디렉토리를 삭제하기 전에 디렉토리의 액세스 권한과 가용성을 어떻게 확인할 수 있습니까? 경우에 따라 호스트 중 하나에서 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
    ...

좋은 시작이 될 것입니다.

관련 정보