目录作为命令行参数

目录作为命令行参数

从下面的代码中,我将搜索大小为零的文件,并提示用户删除它们(如果他们愿意)。但是,我迷失了,因为脚本应该允许将目录指定为命令行参数。如果命令行上未指定目录,我必须使用当前目录作为默认目录。我认为我走在正确的轨道上,但似乎无法弄清楚如何提示用户输入他希望删除的文件的路径。

#!/bin/bash

ls -lR | grep '^-' | sort -k 5 -rn

echo "Files of size zero, relative to current directory, are as follows:"
find . -size 0 -print

echo "Would you like to delete the files of size zero?: Type yes or no"
read answer

if [[ $answer == "yes" ]]
then
    find . -type f -empty -delete
    echo "List of files with size zero files deleted:"
    ls -lR | grep '^-' | sort -k 5 -rn

else
    echo "User wishes to not delete files"
fi

答案1

你会使用

topdir=${1:-.}

这会将topdir变量设置为第一个命令行参数,除非它丢失或为空,在这种情况下它将被设置为..然后您可以"$topdir"在命令中使用。记住要双引号它。

您不会提示用户输入要删除的文件的路径,您已经在使用find该路径:

find "$topdir" -type f -empty -delete

如果您确实想要每个文件都有提示,您可以使用

find "$topdir" -type f -empty -ok rm {} ';'

风格点评:

  • 通常会在标准错误上向用户输出提示:

    echo "Would you like to delete the files of size zero?: Type yes or no" >&2
    read answer
    

    或者

    read -p "Delete files (yes/no): " answer
    
  • 您将-size 0和混合-empty在您的两个find调用中。

相关内容