如何正确检查文件夹层次结构的删除/写入权限?

Der*_*ler 4 bash

在我正在处理的脚本中,我想要rm -rf一个文件夹层次结构.但在此之前,我想确保该过程能够成功完成.所以,这是我提出的方法:

#!/bin/bash
set -o nounset
set -o errexit

BASE=$1
# Check if we can delete the target base folder
echo -n "Testing write permissions in $BASE..."
if ! find $BASE \( -exec test -w {} \; -o \( -exec echo {} \; -quit \) \) | xargs -I {} bash -c "if [ -n "{}" ]; then echo Failed\!; echo {} is not writable\!; exit 1; fi"; then
  exit 1
fi
echo "Succeeded"

rm -rf $BASE
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否有更好的解决方案(更可读,更短,更可靠等).

请注意,我完全清楚检查和实际删除之间的文件访问权限可能会发生变化.在我的用例中,这是可以接受的(与不进行任何检查相比).如果有办法避免这种情况,我很想知道如何.

cho*_*oba 6

您是否知道-perm切换find(如果您的版本中存在)?

find -perm -u+w
Run Code Online (Sandbox Code Playgroud)

  • @奥利弗萨尔茨堡:呵呵。`-perm -u+w` 检查文件是否可由其所有者写入,而不是由运行 `find` 的用户写入。 (2认同)