![将文件夹及其子文件夹中的所有文件名写入 csv 文件的脚本](https://linux22.com/image/1044858/%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%B9%E5%8F%8A%E5%85%B6%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%90%8D%E5%86%99%E5%85%A5%20csv%20%E6%96%87%E4%BB%B6%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我想编写一个 shell 脚本,以便将给定目录及其所有子目录中所有以 .tif 结尾的文件写入 csv 文件。
该目录包含各种子目录,这些子目录也可以包含.zip 文件夹,因此脚本也应该能够从 zip 文件夹中提取名称。
我首先想到的是分开这些步骤(解压缩和获取文件名),但我不确定这是否真的有必要。
由于我对 Shell 的使用还很陌生,所以如果能得到任何帮助我都会很感激。
答案1
要搜索.tif
文件夹及其子文件夹中的文件,然后将输出写入.csv
文件中,您可以使用以下命令:
find /path/to/folder -iname '*.tif' -type f >tif_filenames.csv
还可以在.zip
文件内部进行搜索附加输出到上一个tif_filenames.csv
文件,您可以使用:
find /path/to/folder -iname '*.zip' -type f -exec unzip -l '{}' \; | process
process
以下 Bash 函数在哪里:
function process() {
while read line; do
if [[ "$line" =~ ^Archive:\s*(.*) ]] ; then
ar="${BASH_REMATCH[1]}"
elif [[ "$line" =~ \s*([^ ]*\.tif)$ ]] ; then
echo "${ar}: ${BASH_REMATCH[1]}"
fi
done
}
答案2
您可以使用下面给出的代码,
#!/bin/bash
for f in $(find . -iname "*.tif" -type f)
do
echo "$(basename $f)"
done
for f in $(find . -iname "*.zip" -type f)
do
less $f | grep "tif" | awk '{print $NF}'
done
将文件保存在所有文件和子目录所在的find_tif.sh
目录中,并授予其可执行权限。tif
chmod +x find_tif.sh
用途
./find_tif.sh >> tif_name_file.csv