如何使用bash脚本安全地删除文件夹的内容?

时间:2016-04-09 22:23:33

标签: bash

我想在项目文件夹中自动化构建过程。我有一个本地./build,我在其中运行cmake ..。但是,在每次构建之前,我想刷新./build文件夹的内容。下面是我到目前为止提出的脚本,但它有效,但是,我有点担心它可能会失控并删除一些至关重要的东西。确保以最安全的方式删除文件夹内容的最佳方法是什么?

#!/bin/bash

# Store project's root path.
_currentPath="$PWD"
_buildFolderTag='build'

# Dive into the build folder, if it exists.
if [ -d ${_currentPath}/${_buildFolderTag} ]; then
    # Use the -i flag to first check what files are deleted.
    # Then remove that from the command.
    # We would like to run "rm -rf ./build/*" 
    rm -rf ./${_buildFolderTag}/*
    # Get inside the ./build folder
    cd ${_currentPath}/${_buildFolderTag}
    # Run cmake in there.
    cmake ..
    # Return to project's root.
    cd $_currentPath
fi

1 个答案:

答案 0 :(得分:3)

_buildFolderTag已在您的脚本中修复,因此它永远不会超出build子文件夹。

您可以查看当前的.。它会阻止删除my_crucial_dir/build而不是my_daily_build/build

您可以使用trash-cli代替rm

在Ubuntu上,它位于repo:sudo apt-get install trash-cli

将文件投放到废纸篓:trash-put file1

一次,您应该清空垃圾箱:trash-empty

如果它是一个生产脚本,那么用户就不会对去掉垃圾的东西感到满意。但是你可以回应用户的完整路径并要求确认:

answer=""
echo "Confirm deleting the build folder: "$(pwd)${_buildFolderTag}
while [[ "$answer" != "y" && "$answer" != "n" ]]
do
  read -p "Your choice (y/n): " answer
done
if [[ "$answer" == "y" ]]
then
  rm -rf ./${_buildFolderTag}/*
fi