如何使用bash脚本访问目标目录

时间:2018-02-03 21:29:01

标签: bash shell

我是shell脚本的新手。我正在编写一个脚本来压缩当前和目标目录中的所有文件。我已经成功压缩了当前目录的文件,但是我无法编写用于压缩目标目录中文件的脚本,任何人都可以指导我吗?

我想做这样的事情

% myCompress -t /home/users/bigFoot/ pdf ppt jpg

1 个答案:

答案 0 :(得分:0)

下次尝试传播您的代码(这会更容易回答):

#!/bin/bash 
if [[ $# == 0 ]]; then 
     echo "This shell script compress files with a specific extensions" 
     echo "Call Syntax: compress <extension_list>" 
     exit 
fi
for ext in $*; do 
    for file in ls *.$ext; do
          gzip -k $file 
    done 
done 

犯了错误

1) $* - 所有args在命令之后 - 所以.... -t 路径不是 $ ext 变量

2) ls *.$ext循环为红色,因为2个字符串"ls and *.$ext"应写为 $(ls *.$ext) 以执行ls命令

我的请求脚本

#!/bin/bash

script_name=`basename "$0"`
if [[ $# == 0 ]]; then 
     echo "This shell script compress files with a specific extensions" 
     echo "Call Syntax: $script_name <dirctories_list> <extension_list>" 
     exit 
fi

# check if $1 is a directory
path=". "
file_type=""
for check_type in $* ; do
     if [[ -d $check_type ]]; then 
       path=$path$check_type" "
     else
       file_type=$file_type"*."$check_type" "
     fi
done

echo paths to gzip $path
echo files type to check "$file_type" 

for x in $path; do
    cd $x
    for file in $(ls $file_type); do
           gzip  $file 
    done 
    cd -
done    

解释

1)basename "$0" - 获取脚本名称 - 如果您更改脚本名称,则更通用 - 如果您更改脚本名称

2)path=". " - 变量包含要压缩的所有目录的字符串,您的请求也是在当前目录". "上运行它     file_type="" - 变量包含要在$path字符串

中压缩的所有扩展名的字符串

3)在所有输入ARGS上运行循环,并将目录名称连接到$path字符串,将其他文件类型连接到$file_type

4)对于插入脚本的每个目录:

i. cd $x - 输入directorie

ii. gzip - 压缩所有插入扩展名的文件

iii. cd - - 返回基本目录

检查gzip

我不熟悉 gzip 命令,检查您是否有 -k flag