我是shell脚本的新手。我正在编写一个脚本来压缩当前和目标目录中的所有文件。我已经成功压缩了当前目录的文件,但是我无法编写用于压缩目标目录中文件的脚本,任何人都可以指导我吗?
我想做这样的事情
% myCompress -t /home/users/bigFoot/ pdf ppt jpg
答案 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 命令,检查您是否有 -k flag