Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在多个目录中的dat文件内粘贴一行,具有特定名称的dat文件除外_Bash_Shell_Command Line_Terminal_Echo - Fatal编程技术网

Bash 在多个目录中的dat文件内粘贴一行,具有特定名称的dat文件除外

Bash 在多个目录中的dat文件内粘贴一行,具有特定名称的dat文件除外,bash,shell,command-line,terminal,echo,Bash,Shell,Command Line,Terminal,Echo,在多个目录中的dat文件内粘贴一行,具有特定名称的dat文件除外 这是我到目前为止得到的代码 for file in */*; do if [ $file != "NoEdit.dat" ] then echo 'Configuration' >> $file fi done 关于如何排除名为“NoEdit.dat”的文件有什么想法吗? 我一直在努力实现!(NoEdit.dat)和“if”参数。 我是一个完全的新手编程一般,任何帮助将不胜感激 编辑: 使用find命令有效 find

在多个目录中的dat文件内粘贴一行,具有特定名称的dat文件除外

这是我到目前为止得到的代码

for file in */*; do
if [ $file != "NoEdit.dat" ]
then
echo 'Configuration' >> $file
fi
done
关于如何排除名为“NoEdit.dat”的文件有什么想法吗? 我一直在努力实现!(NoEdit.dat)和“if”参数。 我是一个完全的新手编程一般,任何帮助将不胜感激

编辑: 使用find命令有效

find */* ! -name 'NoEdit.dat' -exec sh -c 'echo "Configuration" >> {}' \;

此代码实现了您想要的:

#!/bin/bash
directory='/folder/'
mkdir -p /tmp/
find "$directory" -maxdepth 1 -type f -printf '%f\n' | grep -e ".dat" | grep -v "NoEdit.dat" > /tmp/holder && directoryEscaped="$(echo "$directory" | sed 's/\//\\\//g')" && sed -i -e "s/^/$directoryEscaped/" /tmp/holder
while read -r line; do
filename="$line"
echo 'Configuration' >> "$filename"
done < /tmp/holder
exit 0
#/bin/bash
目录='/folder/'
mkdir-p/tmp/
查找“$directory”-maxdepth 1-类型f-printf“%f\n”| grep-e.dat“| grep-v”NoEdit.dat”>/tmp/holder&&directoryseived=“$(echo“$directory”| sed's/\/\\\//\\\//g')”和&sed-i-e“s/^/$directoryseived/”/tmp/holder
而read-r行;做
filename=“$line”
回显“配置”>>“$filename”
完成
您所需要做的就是为变量“directory”提供要搜索的文件夹路径。基本上,代码创建一个临时文件,其中包含与您提供的名称不匹配的所有文件的文件路径,然后在每个文件上(在每个文件的末尾)回显字符串


编辑:我编辑代码以仅搜索和更改.dat文件

此代码实现了您想要的:

#!/bin/bash
directory='/folder/'
mkdir -p /tmp/
find "$directory" -maxdepth 1 -type f -printf '%f\n' | grep -e ".dat" | grep -v "NoEdit.dat" > /tmp/holder && directoryEscaped="$(echo "$directory" | sed 's/\//\\\//g')" && sed -i -e "s/^/$directoryEscaped/" /tmp/holder
while read -r line; do
filename="$line"
echo 'Configuration' >> "$filename"
done < /tmp/holder
exit 0
#/bin/bash
目录='/folder/'
mkdir-p/tmp/
查找“$directory”-maxdepth 1-类型f-printf“%f\n”| grep-e.dat“| grep-v”NoEdit.dat”>/tmp/holder&&directoryseived=“$(echo“$directory”| sed's/\/\\\//\\\//g')”和&sed-i-e“s/^/$directoryseived/”/tmp/holder
而read-r行;做
filename=“$line”
回显“配置”>>“$filename”
完成
您所需要做的就是为变量“directory”提供要搜索的文件夹路径。基本上,代码创建一个临时文件,其中包含与您提供的名称不匹配的所有文件的文件路径,然后在每个文件上(在每个文件的末尾)回显字符串


编辑:我编辑的代码仅用于搜索和更改.dat文件

谢谢您的回答,我非常感谢!我碰巧通过使用“find”命令以自己的方式解决了这个问题,我将把它放在这里,以备使用:
find*/*-名称'NoEdit.dat'-exec sh-c'echo“Configuration”>>{}\不客气!我刚刚在您的代码(以及我的代码)中指出,脚本将向所有未命名为“NoEdit.dat”的文件(包括,例如,.txt文件)添加“配置”。我更正了我的答案,只查找和更改所需的“.dat”文件。谢谢你的回答,我非常感谢!我碰巧通过使用“find”命令以自己的方式解决了这个问题,我将把它放在这里,以备使用:
find*/*-名称'NoEdit.dat'-exec sh-c'echo“Configuration”>>{}\不客气!我刚刚在您的代码(以及我的代码)中指出,脚本将向所有未命名为“NoEdit.dat”的文件(包括,例如,.txt文件)添加“配置”。我更正了我的答案,按照问题的要求只查找和更改“.dat”文件。