私は次のスクリプトを使用します。シンボリックリンクで指定されない限り、ディレクトリの削除
スクリプトを使用してディレクトリを削除する前に、ディレクトリのアクセス権と可用性をどのように確認できますか?場合によっては、ホストの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
...
良いスタートになります。