Найдите файл с соответствующей строкой и выполните над ним действия UNIX

Найдите файл с соответствующей строкой и выполните над ним действия UNIX

30.01.2020 07:20:40 Просмотров 24 Источник

Часть 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

franzisk

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/' {} \;
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990610#comment106095017_59990610
СЭД: 1: "./.DS_Store": недопустимый код команды .Столкнувшись с этой ошибкой? и я не могу видеть и копию файла я хочу сделать копию и файла с концом _2.txt и добавить _2 в конце созданных файлов
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990610#comment106095272_59990610
Хорошо, я понял проблему: вы находитесь в системе MAC, команда sed там другая, так почему вы говорите UNIX в названии вопроса?
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990610#comment106095338_59990610
Вы можете помочь мне только с командой unix..
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990610#comment106098494_59990610
Я добавил синтаксис команды mac, в любом случае ваш вопрос запутан
gorn

30.01.2020 07:44:04

Попробуйте выполнить следующую команду, она будет искать файлы, игнорируя *_MED.txt

find . -type f \( -iname "*.txt" ! -iname "*_MED.txt" \)
Является ответом!
VTacius

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"' {} +

https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106095105_59990842
найти: %pn': неизвестный первичный или оператор
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106095317_59990842
Что делать, если вывод из find MyFolder/ - mindepth 1-type f-not-name '*_MED.txt' - printf`
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106095954_59990842
Ваш код выполняет работу только той части, которая создает файл, подобный abc.txt_MED.txt он должен быть abc_MED.формат txt...Пожалуйста, помогите мне с изменением кода, Спасибо в тоннах
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106096938_59990842
найдите MyFolder/ - mindepth 1-type f-not-name '*_MED.тхт' -е 'эхо МВ %п $(Эхо %П| Е С/.txt / _MED.txt/g')\n' / bash | bash
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106097275_59990842
Я попробовал приведенный ниже код, он заменяет существующий файл на _MED вместо создания нового файла и добавления _MED.txt в него
https://stackoverflow.com/questions/59990264/find-a-file-with-a-matching-string-and-perform-actions-on-it-unix/59990842#comment106112059_59990842
Опция-mindepth 1 конфликтует с "циклом через каждую папку и подпапку" в вопросе
Закрыть X