用shell语句遍历键盘输入的目录和子目录所有的文件并把指定格式文件输出
时间: 2024-04-14 12:30:39 浏览: 116
你可以使用以下的shell脚本来遍历键盘输入的目录及其子目录中的所有文件,并将指定格式的文件输出:
```shell
#!/bin/bash
echo "请输入目录路径:"
read directory
echo "请输入要输出的文件格式(例如:.txt):"
read file_format
find "$directory" -type f -name "*$file_format" -print
```
这个脚本首先会要求你输入目录路径,然后要求你输入要输出的文件格式。接下来,它使用`find`命令来查找指定目录及其子目录中符合指定文件格式的文件,并使用`-print`参数将文件路径输出到终端。注意,`$directory`和`$file_format`是变量,会根据你的输入进行替换。
你可以保存这个脚本为一个.sh文件,然后在终端中运行该脚本。输入目录路径和文件格式后,脚本将输出所有符合条件的文件路径。
相关问题
用shell语句遍历访问目录
你可以使用以下的shell语句来遍历访问目录:
```shell
#!/bin/bash
# 设置要遍历的目录
directory="/path/to/directory"
# 遍历目录中的所有文件和子目录
for file in "$directory"/*
do
if [ -d "$file" ]; then
# 如果是目录,则进行递归遍历
echo "目录:$file"
# 递归调用自身,遍历子目录
"$0" "$file"
elif [ -f "$file" ]; then
# 如果是文件,则进行相应操作,例如打印文件名
echo "文件:$file"
fi
done
```
将上述代码保存为一个扩展名为`.sh`的文件(例如`traverse.sh`),然后在终端中运行该脚本即可遍历访问指定目录中的所有文件和子目录。记得将`/path/to/directory`替换为你要遍历的目录路径。
写一个shell脚本,依次检查当前目录及所有子目录下面的vsif文件,找到所有以test开头的语句,如果没有就不再检查当前文件。将所有包含test开头的语句及其所包含的内容增加输出到test_b.vsif中。其中test_b.vsif中的b改为当前目录及所有子目录下面的vsif文件名的_c.vsif的c。注意每次输出test.vsif不是覆盖而是增加,test.vsif保存在当前目录。
好的,以下是这个脚本的代码:
```bash
#!/bin/bash
# 获取所有vsif文件的路径
vsif_files=$(find . -name "*.vsif")
# 遍历每个vsif文件
for file in $vsif_files; do
# 如果没有包含test开头的语句就跳过
if ! grep -q "^test" "$file"; then
continue
fi
# 获取当前目录及所有子目录下的vsif文件名
vsif_names=$(find . -name "*.vsif" | awk -F/ '{print $NF}' | sed 's/\.vsif//g' | sed "s/^/${file%/*}\//")
# 遍历每个包含test开头的语句
grep "^test" "$file" | while read line; do
# 将语句及其所包含的内容写入test_b.vsif中
echo "$line" >> test_b.vsif
sed -n "/$line/,/^$/p" "$file" >> test_b.vsif
done
# 根据当前vsif文件名修改test_b.vsif中的c
sed -i "s/_c.vsif/_${file##*/}/g" test_b.vsif
# 将test_b.vsif中的内容追加到test.vsif中
cat test_b.vsif >> test.vsif
# 清空test_b.vsif的内容
> test_b.vsif
done
```
这个脚本会在当前目录及所有子目录下查找所有的vsif文件,并遍历每个vsif文件,如果发现有以test开头的语句则将语句及其所包含的内容写入test_b.vsif中,并在其中的c处替换为当前vsif文件的名称。最后将test_b.vsif中的内容追加到test.vsif中,并清空test_b.vsif的内容,以备下次使用。
阅读全文