recursion查找具有特定扩展名的文件
我试图find具有特定扩展名的所有文件在我的bash(最新的Ubuntu LTS发布)目录及其子目录中。
这是写在脚本文件中的内容:
#!/bin/bash directory="/home/flip/Desktop" suffix="in" browsefolders () for i in "$1"/*; do echo "dir :$directory" echo "filename: $i" # echo ${i#*.} extension=`echo "$i" | cut -d'.' -f2` echo "Erweiterung $extension" if [ -f "$i" ]; then if [ $extension == $suffix ]; then echo "$i ends with $in" else echo "$i does NOT end with $in" fi elif [ -d "$i" ]; then browsefolders "$i" fi done } browsefolders "$directory"
不幸的是,当我在terminal上启动这个脚本时,它说:
[: 29: in: unexpected operator
(用$extension
而不是'in'
)
这里发生了什么事,错误在哪里? 但是这个花括号
find $directory -type f -name "*.in"
比整个事情要短一些(而且更安全 – 处理文件名和目录名称中的空格)。
您的脚本可能会失败,没有一个条目.
在他们的名字,使$extension
空。
find {directory} -type f -name '*.extension'
例如 查找当前目录中的所有csv文件
find . -type f -name '*.csv'
我使用的语法与@Mattbuild议的有些不同:
find $directory -type f -name \*.in
(这是一个less击键)。
-
browsefolders ()
后面有一个{
missing - 所有
$in
都应该是$suffix
-
cut
线只会让你在front.middle.extension
的中间部分。 您应该阅读${varname%%pattern}
和朋友的shell手册。
我假设你在shell脚本中做这个练习,否则已经提出的find
解决scheme是要走的路。
要检查正确的shell语法,而不运行脚本,请使用sh -n scriptname
。
不使用find
:
du -a $directory | awk '{print $2}' | grep '\.in$'
要查找当前目录中的所有pom.xml
文件并将其打印出来,可以使用:
find . -name 'pom.xml' -print
find $directory -type f -name "*.in"|grep $substring