権限が拒否されるとエコーされます。

権限が拒否されるとエコーされます。

私は次のスクリプトを使用します。シンボリックリンクで指定されない限り、ディレクトリの削除

スクリプトを使用してディレクトリを削除する前に、ディレクトリのアクセス権と可用性をどのように確認できますか?場合によっては、ホストの1つで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シンボリックリンクの最終宛先に到達するために通過する必要があるすべてのディレクトリへの検索アクセスも必要です。

これを確認するには、同じファイルへの2つのパスが"$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
    ...

良いスタートになります。

おすすめ記事