删除 bash 中长度为 0 的文件

Har*_*ngh 2 linux bash

我想在 Linux 终端中创建一个 bash 脚本以进入一个文件,如果它为空,则将其删除:

#!/bin/bash
echo " Enter name of a directory"
read Dir
for Directory in $( ls $HOME )
do 
  test -d $HOME/$dir
  if [ $# -eq 0 ]
  then 
    for filename in $( ls $HOME/$Dir )
    do 
      test -d $HOME/$dir/$filename
      if [ ! -s "$filename"  ]
      then
        rm $HOME/$dir/$filename
      else 
        echo " not empty"
      fi 
    done 
  else 
    echo " $Dir is not a directory" 
  fi 
done
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,但它不起作用。它识别创建的文件,但即使为空也不会删除它。Salah 显示没有这样的文件或目录

Jay*_*got 5

编辑 1 (Erik Renouf) 以坚持按照 The Open Group Base Specifications Issue 6 中的规定查找

已编辑 2(通配符)+ 符号和原始 {}

试一试,将下面命令行中的mydir替换为需要计算的目录名称:

find "${HOME}"/mydir -size 0 -type f -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

它正在删除位于“${HOME}”/mydir 目录及其子目录(如果有)中的所有空文件。

下面有一个脚本版本:

#!/bin/bash --
find "${HOME}"/"${1}" -size 0 -type f -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

测试

列出testd下的所有空文件:

$ find "${HOME}"/testd -size 0 -type f
/home/jay/testd/empty_file.txt
Run Code Online (Sandbox Code Playgroud)

使用脚本删除空文件:

$ chmod +x clearner.sh
$ ./clearner.sh testd
Run Code Online (Sandbox Code Playgroud)

检查空文件:

$ find "${HOME}"/testd -size 0 -type f
$
Run Code Online (Sandbox Code Playgroud)

  • 既然 `-empty` 是一个 GNU 特定的标志,为什么不直接使用 `-delete` 而不是 `-exec rm`? (2认同)