写一个Shell脚本,用文件名和目录名作为命令行参数,如果文件是一个普通文件并在给出的目录中,则删除该文件。若文件(第一个参数)是一个目录,则删除此目录(包括所有的文件和子目录)。
时间: 2024-10-09 11:02:21 浏览: 21
在Shell中,你可以创建一个简单的bash脚本来完成这个任务。这里是一个基础示例:
```bash
#!/bin/bash
# 检查是否提供了两个参数
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <filename> <directory>"
exit 1
fi
# 获取文件名和目录名
file="$1"
dir="$2"
# 检查文件是否存在,并判断其类型
if [ -f "$file" ]; then
# 如果是普通文件,删除它
if rm -f "$file"; then
echo "File $file deleted."
else
echo "Failed to delete file $file."
fi
elif [ -d "$file" ]; then
# 如果是目录,递归删除
if rm -rf "$dir"; then
echo "Directory $dir and its contents deleted."
else
echo "Failed to delete directory $dir."
fi
else
echo "Invalid input: '$file' is not a regular file or a directory."
fi
# 提供一些相关问题
相关问题
写一个 shell 脚本,该脚本用一个目录的名字作为参数。然后脚本搜索以这个目录为根的目录中大小为0的文件,并把文件的名字写到标准输出。如果命令行没有任何选项,脚本就在显示出找到的文件名后刑除它,在删除前要得到用户的确认。如果在命令行上带有-f选项,那么脚本在显示出找到的文件名后不需要用户确认就剧除这些文件。
好的,以下是您需要的 shell 脚本:
```
#!/bin/bash
# 判断参数是否传入
if [[ $# -eq 0 ]]; then
echo "Usage: $0 directory [-f]"
exit 1
fi
# 获取目录名和是否强制删除标志
dir=$1
force_delete=false
if [[ $# -eq 2 && $2 == "-f" ]]; then
force_delete=true
fi
# 搜索大小为0的文件
zero_size_files=$(find "$dir" -type f -size 0)
# 显示文件名并删除
if [[ -n $zero_size_files ]]; then
echo "Found zero-sized files:"
echo "$zero_size_files"
if [[ $force_delete == false ]]; then
read -p "Are you sure you want to delete these files? [y/N] " answer
if [[ $answer == "y" || $answer == "Y" ]]; then
rm $zero_size_files
echo "Deleted successfully!"
else
echo "Aborted."
fi
else
rm $zero_size_files
echo "Deleted successfully!"
fi
else
echo "No zero-sized files found."
fi
```
您可以将该代码保存为 `delete_zero_files.sh`,并在终端中使用以下命令来运行:
```
bash delete_zero_files.sh directory [-f]
```
其中 `directory` 是要搜索的目录名称,`-f` 是可选的强制删除标志。如果您不希望强制删除这些文件,请不要在命令行上使用 `-f` 选项。
linux系统中,用一个目录作为命令行参数,将该目录下的所有文件中名字最长的那个文件名输出。如果命令行参数不是一个目录,则输出提示信息,同时返回一个非0退出码
你好,感谢您的提问。
针对您的问题,可以通过以下的 Shell 脚本实现:
```bash
#!/bin/bash
if [ ! -d "$1" ]; then
echo "Error: Please provide a directory as argument."
exit 1
fi
longest_file=""
longest_file_len=0
for file in "$1"/*; do
if [ -f "$file" ]; then
len=$(echo "$file" | wc -c)
if (( $len > $longest_file_len )); then
longest_file="$file"
longest_file_len=$len
fi
fi
done
if [ "$longest_file" == "" ]; then
echo "Error: No files found in the directory."
exit 1
fi
echo "$longest_file"
```
这个脚本首先判断命令行参数是否为目录,如果不是,则输出错误提示,并且返回非0的退出码。
如果命令行参数是一个目录,它会遍历该目录下的每个文件,并计算每个文件名的长度。如果它发现一个文件名比当前跟踪的最长文件名更长,它就会更新最长文件名和其长度。这样,当它遍历完整个目录时,它将留下最长的文件名。
最后,如果目录中不存在文件,则输出错误提示,并且返回非0的退出码。
希望这个回答能够帮助您。如有任何其他问题,请随时提出!
阅读全文