检查子目录是否存在压缩文件——如果不存在则压缩
Checking subdirectories for existence of compressed file -- compressing if does not exist
我正在尝试编写一个脚本来检查子目录是否存在压缩文件,如果文件不存在,则压缩必要的文件。
我已经尝试了两个版本的脚本:
版本 1
for directory in /pool/folder/ID*/; do
echo "Starting for loop"
if [ -e /pool/folder/ID*/*.txt.gz ]
then
echo "file already exists"
else
echo "File does not exist"
echo "file is being compressed"
gzip *.txt
fi
done
这没有用,我认为它与我的 -e 标志有关:http://www.ducea.com/2009/03/05/bash-tips-if-e-wildcard-file-check-too-many-arguments/
一旦我的 "if" 语句开始,终端输出看起来像是在尝试检查我计算机上的每个子目录:
Display all 4854 possibilities? (y or n)
然后它继续列出每个目录。所以我尝试删除我的 -e 标志并使用 ls:
版本 2
for directory in /pool/folder/ID*/; do
echo "Starting for loop"
files=$(ls /pool/folder/ID*/*.txt.gz 2> /dev/null | wc -l)
if [ **"$files" != "0"** ]
then
echo "zipped file already exists"
else
echo "Zipped file does not exist"
fi
done
但同样的事情发生了(列出所有目录)。
这就是你想要的吗?
这将进入目录 dir
并检查其中的所有文件。如果文件已经压缩,继续,如果文件没有压缩,压缩它。
for dir in /pool/folder/ID*; do
[ -d "${dir}" ] || continue
printf "processing %s\n" "${dir}"
for file in "${dir}"/*.txt; do
if [ -f "${file}.gz" ]; then
printf "%s already compressed\n" "${file}"
elif [ -f "${file}" ]; then
printf "%s being compressed\n" "${file}"
gzip "${file}"
fi
done
done
再短一点就是:
for dir in /pool/folder/ID*; do
[ -d "${dir}" ] || continue
printf "processing %s\n" "${dir}"
for file in "${dir}"/*.txt; do
[ -f "${file}.gz" ] && printf "%s already compressed\n" "${file}" && continue
[ -f "${file}" ] && printf "%s being compressed\n" "${file}" && gzip "${file}"
done
done
我正在尝试编写一个脚本来检查子目录是否存在压缩文件,如果文件不存在,则压缩必要的文件。
我已经尝试了两个版本的脚本:
版本 1
for directory in /pool/folder/ID*/; do
echo "Starting for loop"
if [ -e /pool/folder/ID*/*.txt.gz ]
then
echo "file already exists"
else
echo "File does not exist"
echo "file is being compressed"
gzip *.txt
fi
done
这没有用,我认为它与我的 -e 标志有关:http://www.ducea.com/2009/03/05/bash-tips-if-e-wildcard-file-check-too-many-arguments/
一旦我的 "if" 语句开始,终端输出看起来像是在尝试检查我计算机上的每个子目录:
Display all 4854 possibilities? (y or n)
然后它继续列出每个目录。所以我尝试删除我的 -e 标志并使用 ls:
版本 2
for directory in /pool/folder/ID*/; do
echo "Starting for loop"
files=$(ls /pool/folder/ID*/*.txt.gz 2> /dev/null | wc -l)
if [ **"$files" != "0"** ]
then
echo "zipped file already exists"
else
echo "Zipped file does not exist"
fi
done
但同样的事情发生了(列出所有目录)。
这就是你想要的吗?
这将进入目录 dir
并检查其中的所有文件。如果文件已经压缩,继续,如果文件没有压缩,压缩它。
for dir in /pool/folder/ID*; do
[ -d "${dir}" ] || continue
printf "processing %s\n" "${dir}"
for file in "${dir}"/*.txt; do
if [ -f "${file}.gz" ]; then
printf "%s already compressed\n" "${file}"
elif [ -f "${file}" ]; then
printf "%s being compressed\n" "${file}"
gzip "${file}"
fi
done
done
再短一点就是:
for dir in /pool/folder/ID*; do
[ -d "${dir}" ] || continue
printf "processing %s\n" "${dir}"
for file in "${dir}"/*.txt; do
[ -f "${file}.gz" ] && printf "%s already compressed\n" "${file}" && continue
[ -f "${file}" ] && printf "%s being compressed\n" "${file}" && gzip "${file}"
done
done