2016-11-30 1 views
1

Вставка строки в файлы данных в нескольких каталогах, за исключением файлов данных с определенным именем.Вставка строки в файлы данных в нескольких каталогах, за исключением файлов данных с определенным именем

Вот код, который у меня до сих пор.

for file in */*; do 
if [ $file != "NoEdit.dat" ] 
then 
echo 'Configuration' >> $file 
fi 
done 

Любые идеи о том, чтобы исключить файлы, которые идут по имени «NoEdit.dat»? Я пытался реализовать! (NoEdit.dat) и аргументы «if». Я полный новичок в программировании в целом, любая помощь будет оценена!

EDIT: Использование команды find выполнено.

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

ответ

0

Этот код добивается того, чего вы хотите:

#!/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 

Все, что вам нужно сделать, это обеспечить «каталог» переменной с пути папки для поиска. В принципе, код создает временный файл с файловыми путями для всех файлов, которые не соответствуют указанному вами имени, а затем он выводит строку на каждом из них (в конце каждого файла).

Edit: Я редактировал код для поиска и изменить только .dat файлы

+0

Спасибо за ваш ответ, я это очень ценю! Мне удалось решить проблему в моих путях с помощью команды «найти», я положу ее сюда, если она будет использоваться: 'find */*! -name 'NoEdit.dat' -exec sh -c 'echo "Конфигурация" >> {}' \; ' –

+0

Добро пожаловать! Я только что отметил на вашем коде (и на моем коде), что скрипт добавит «Конфигурация» ко всем файлам, не названным «NoEdit.dat» (включая, например, .txt-файлы). Я исправил свой ответ, чтобы искать и изменять только «.dat» файлы в качестве необходимого вопроса. –