Найдите файл с соответствующей строкой и выполните над ним действия UNIX
Часть 1: у меня есть папка " MyFolder "с несколькими вложенными папками, такими как" new"," old " и т. д. Мне нужен код UNIX, который будет перебирать каждую папку и подпапку и создавать копию файлов " abc_MED.txt" which isn't have " _MED.формат txt" Например: abc.тхт -> abc_MED.тхт -> abc_MED.формат txt Он не должен добавлять каждый раз abc_MED_MED.txt XX
Часть 2: для всех файлов с "_MED.txt " он должен добавить "_2" в конце первой строки файла.
Любая помощь будет оценена по достоинству.
Я попробовал это:
for file in *.txt
do
if [[ ! -f ${file%*}_MED.txt ]]
then
cp $file ${file%.*}_MED.txt
fi
done
Ответы - Найдите файл с соответствующей строкой и выполните над ним действия UNIX / Find a file with a matching string and perform actions on it UNIX

30.01.2020 07:40:54
Это мое решение Баша
find . -type f -not -name "*_MED*" -exec sed -i '1{s/$/_2/}' {} +
Объяснение:
Найдите все файлы (-f), которые не (-not) соответствуют (-name) шаблону "_MED", для каждого из них выполните команду sed sed-i '1{s/$ / _2/}', которая добавляет _2 в конце строки, только один раз
находить. -тип F -не -название "_MED" -старпома СЕПГ -я " '1и\'$'\п"_2' {} +
РЕДАКТИРОВАТЬ
Поскольку вы находитесь на машине mac (я этого не знал), команда sed немного отличается, попробуйте эту
find . -type f -not -name "*_MED*" -exec sed -i '' '1s/$/ _2/' {} \;






30.01.2020 07:54:38
С find
, создав команду с параметром-printf
и затем, выполнив с pipe to bash :
find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -printf 'echo mv %p $(echo %p| sed 's/.txt/_MED.txt/g')\n' | bash | bash
Вторая часть, добавление контента
find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -exec sed -E -i '/$/ a "_2"' {} +





