shell遍历文件夹并提取文件名字
时间: 2023-09-04 12:12:13 浏览: 309
可以使用`ls`命令配合通配符来遍历文件夹并提取文件名字。
例如,如果要提取当前文件夹下所有以`.txt`结尾的文件名字,可以使用以下命令:
```
ls *.txt
```
如果要将文件名字输出到一个文件中,可以使用重定向符号`>`,例如:
```
ls *.txt > file_names.txt
```
这样会将文件名字输出到名为`file_names.txt`的文件中。
相关问题
shell脚本实现遍历某个目录下所有的目录和子目录下的文件和文件夹,筛选出小于10T的文件夹和文件,然后删除筛选结果
可以使用以下脚本实现:
```bash
#!/bin/bash
# 定义函数,递归遍历目录和子目录下的文件和文件夹
function traverse() {
for file in `ls $1`
do
if [ -d "$1/$file" ] # 如果是目录,递归遍历
then
traverse "$1/$file"
else
size=`du -sk "$1/$file" | awk '{print $1}'` # 获取文件大小
if [ $size -lt 10240 ] # 如果小于10T,删除文件
then
rm -rf "$1/$file"
echo "删除文件:$1/$file"
fi
fi
done
}
# 调用函数,传入目录路径
traverse "/path/to/directory"
```
其中,`du -sk` 命令用于获取文件或文件夹的大小(单位为KB),`awk '{print $1}'` 用于提取出大小值(去掉单位)。`-lt` 表示小于,`10240` 表示10T的大小(单位为KB)。`rm -rf` 命令用于删除文件或文件夹。
shell 获取文件夹下所有子文件夹下所有文件的名称 如果子文件夹以anim开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.anim. 中间:文件名称 结尾:" /> 如果子文件夹以drawable开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.drawable. 中间:文件名称 结尾:" /> 如果子文件夹以layout开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.layout. 中间:文件名称 结尾:" /> 如果子文件夹以mipmap开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.mipmap. 中间:文件名称 结尾:" /> 如果子文件夹以values开头,并且文件名为dimens.xml,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.dimen. 中间:获取dimens.xml中name对应的value 结尾:" /> 每生成一个字符串,换行再生成下一个字符串 以上字符串聚合去重保存一个txt中
你可以使用以下的Shell脚本来完成这个任务:
```shell
#!/bin/bash
# 设置需要搜索的文件夹路径
dir_path="/path/to/folder"
# 遍历文件夹及其子文件夹下的所有文件
for file_path in $(find "$dir_path" -type f); do
# 获取文件名和所在文件夹的名称
file_name=$(basename "$file_path")
dir_name=$(basename "$(dirname "$file_path")")
# 根据文件夹名称生成字符串
if [[ "$dir_name" == "anim"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.anim.$file_name\" />"
elif [[ "$dir_name" == "drawable"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.drawable.$file_name\" />"
elif [[ "$dir_name" == "layout"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.layout.$file_name\" />"
elif [[ "$dir_name" == "mipmap"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.mipmap.$file_name\" />"
elif [[ "$dir_name" == "values"* ]] && [[ "$file_name" == "dimens.xml" ]]; then
# 从dimens.xml中提取name和value
while read -r line; do
if [[ $line =~ ^[[:space:]]*<dimen[[:space:]]+name=\"([^"]+)\"[[:space:]]+[^>]*>(.*)</dimen> ]]; then
dimen_name="${BASH_REMATCH[1]}"
dimen_value="${BASH_REMATCH[2]}"
string="<path value=\"com.youxiang.soyoungapp.R.dimen.$dimen_name\">$dimen_value</path>"
break
fi
done < "$file_path"
else
# 跳过其他文件夹和未知文件
continue
fi
# 将字符串添加到结果中
result+="$string\n"
done
# 对结果去重并保存到文件
echo -e "$result" | sort -u > output.txt
```
你只需要将其中的`/path/to/folder`替换成你的文件夹路径,运行该脚本即可生成一个名为`output.txt`的文件,其中包含了所有符合要求的字符串,并且已经去重。
阅读全文