如何避免Linux中的find命令抛出错误

vxbzzdmp  于 2023-06-29  发布在  Linux
关注(0)|答案(3)|浏览(161)

我知道使用find命令删除旧文件的方法是:

find /mydir/typ* -type f -mtime + 5 -delete

但是,如果它没有找到文件,则返回错误saying no matches found。有没有一种方法可以让失败悄无声息地发生,即。如果它找不到文件,就不会抛出错误。如果有,删除它。

f0brbegy

f0brbegy1#

find /mydir/typ* -type f -mtime + 5 -delete 2> /dev/null
vm0i2vca

vm0i2vca2#

所以,从你对另一个答案的评论来看,你的 full 错误是zsh: no matches found。* 错误来自shell,而不是find*。
/mydir/typ*是一个shell glob,如果没有文件匹配这个glob,zsh默认会给出一个错误。More info on that here
目前还不清楚您的目录结构和预期用途是什么,但如果您想在/mydir中查找与typ*匹配的文件,则需要find /mydir -name 'typ*' -type f -mtime +5 -delete。否则,你必须更具体地说明你的情况。

bogh5gae

bogh5gae3#

find在子进程中执行,任何错误都将被丢弃,只有结果输出到命令管道

#!/bin/bash

set -o pipefail
shopt -s extglob

_lsof() {
    local f="${1}" \
        inum
    inum="$(ls -i "$(readlink -f "${f}")" 2> /dev/null )" && \
    ( find /proc/+([0-9])/fd -follow -inum ${inum%% *} 2> /dev/null || : ) | \
        cut -f 3 -s -d '/' | \
        sort -n -u | \
        grep -sxvF "1"
}

相关问题