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



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

我想做这样的事情

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

下次尝试传播你的代码(这将使它更容易回答):

#!/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)$*- 命令之后的所有参数 - 所以....-tpath不是$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- 进入导演

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

iii.cd -- 返回到基目录

检查 gzip

我不熟悉gzip命令,检查你有没有-k标志

最新更新