【问题标题】:Looping through files in different directory given command line argument给定命令行参数循环遍历不同目录中的文件
【发布时间】:2012-10-15 02:36:04
【问题描述】:

我正在尝试扩展一个脚本,以实现类似于 Linux 上文件的回收站之类的功能。我有我在底部扩展的代码。

在我的扩展程序中,当脚本显示命令行参数-cleanup 时,我想遍历/home/7/bearm/.garbage 目录中的文件,并让用户决定是否要删除该文件。

但是,我不知道如何检测命令行参数何时存在。命令行可以有其他参数,我只是想在使用-cleanup时循环文件。

我也不知道如何循环访问不同目录 (/home/7/bearm/.garbage) 中的文件。

我将如何去做这些事情?

set directory = '/home/7/bearm/.garbage/'

if(! -d "$directory") then
    mkdir .garbage
    mv .garbage /home/7/bearm/
endif

set n = 1

while ($n <= $#argv)
    set file = $argv[$n]
    if(-d $file) then
        #do nothing
        echo "Cannot trash directory $file"
    else
        mv $file /home/7/bearm/.garbage
        echo "Trashed $file"
    endif
    @ n++
end
du -h /home/7/bearm/.garbage

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    要测试参数是否包含-cleanup,您可以这样做(在Minix3 上使用ash 进行测试):

    if echo "$@" | grep -- "-cleanup" >/dev/null 2>&1; then
        echo "-cleanup is present..."
    fi
    

    此外,如果您想要使用长 GNU 样式选项的正确解决方案,请参阅 http://www.sputnick-area.net/scripts/getopts_long_example.shhttp://www.sputnick-area.net/scripts/getopts_long.sh


    您的伪脚本的bash 版本:

    #!/bin/bash
    
    directory='/home/7/bearm/.garbage/'
    
    mkdir -p "$directory"
    
    for arg; do
        if [[ -d $arg ]]; then 
            #do nothing
            echo "Cannot trash directory $arg" >&2
        else    
            mv "$arg" "$directory"
            echo "Trashed $arg"
        fi      
    done    
    
    du -sh "$directory"
    

    请随时使用-cleanup 开关对其进行改进。

    【讨论】:

    • 添加了伪脚本的 bash 版本
    • 谢谢,但是如何循环浏览 .garbage 中的文件?
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多