Bash - 如何使用find命令排除目录以及如何使用find获取完整路径?

时间:2016-01-28 19:09:13

标签: linux bash shell unix

所以我现在有了下面的代码,我遇到了一些问题

  1. 我在排除

    输出的目录时遇到问题
    find ${1-.}
    

    它也给了我目录而不仅仅是名字;我尝试了不同的方法,如-prune等。

  2. 我在删除空文件时遇到问题

  3. 给我的数据
        EMPTY_FILE=$(find ${1-.} -size 0)
    

    不给我正确的道路 这是

    的输出
        TestFolder/TestFile
    

    在这种情况下,我不能这样做:

        rm TestFolder/TestFile
    

    因为它是无效的路径;因为它需要./TestFolder/TestFile

    我如何添加./或者在那里获取完整路径。

        #!/bin/bash
    
        echo "Here are all the files in the directory specified\n"
        find ${1-.}
    
        EMPTY_FILE=$(find ${1-.} -size 0)
        echo "Here are the list of empty files\n"
        echo "$EMPTY_FILE \n"
        echo "Do you want to delete those empty files?(yes/no)"
        read text
        if [ "$text" == "yes" ]; then $(rm -- $EMPTY_FILE); fi
    

    感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

你想要这个:

#!/bin/bash

echo -e "Here are all the files in the directory specified\n"

# Use -printf "%f\n" to print the filename without leading directories
# Use -type f to restrict find to files
find "${1-.}" -type f -printf "    %f\n"

echo -e "Here are the list of empty files\n"

# Again, use -printf "%f\n"
find "${1-.}" -type f -size 0 -printf "    %f\n"

echo -e "Do you want to delete those empty files?(yes/no)"
read answer

# Delete files using the `-delete` option
[ "$answer" = "yes" ] && find "${1-.}" -type f -size 0 -delete

另请注意,我在任何情况下都会引用"${1-.}"。由于它是用户输入,因此您无法依赖输入。即使它是一个路径,它仍然可能包含有问题的字符,如空格。

答案 1 :(得分:1)

  

我在排除

输出的目录时遇到问题
Model
     

它也给了我目录而不是名字

您正在寻找find ${1-.} 测试。要指示-type仅报告常规文件,您可以说

find

这可能是你真正想要的,但你实际要求的(只排除目录)将是

find ${1-.} -type f

仅排除目录也会列出符号链接和特殊文件。

  

在这种情况下,我不能这样做:

find ${1-.} -not -type d
     

因为它是无效的路径;因为它需要./TestFolder/TestFile

无意义。 rm TestFolder/TestFile ./TestFolder/TestFile完全相同。

无论如何,TestFolder/TestFile 打印从指定的起始路径开始的路径。

答案 2 :(得分:0)

我有一种感觉,我在你的问题中遗漏了一些东西,但如果您只需要排除目录,只需告诉find只查找文件:

find . -type f -size 0 -delete

然后调整它以适合您的脚本。希望这会有所帮助。

答案 3 :(得分:0)

-size 0 -type f

没有选项的rm不会删除目录。无论如何,你声称rm需要./是错误的。