给定命令行参数,在不同目录中循环文件

时间:2012-10-15 02:36:05

标签: linux shell

我正在尝试扩展一个脚本,该脚本实现类似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

1 个答案:

答案 0 :(得分:1)

要测试参数是否包含-cleanup,您可以执行此操作(使用ash上的Minix3进行测试):

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开关来改善它。