Створіть резервну копію каталогу програмування


1

У мене є каталог з багатьма складеними програмами на С, які я хотів би створити резервну копію. Зараз вони названі, program.outале я хотів би змінити це на справедливе program.

Чи все-таки можна було б їх виключити? Крім того, який би регулярний вираз я використовував для швидкого перейменування їх усіх?


Якщо ви просто намагаєтесь перейменувати деякі файли, як відповідний вам сценарій? Я не бачу жодної згадки program.outв сценарії.
jw013

Відповіді:


0

Для резервного копіювання коду використовуйте git або інше програмне забезпечення для контролю версій. В Інтернеті у вас є багато варіантів, щоб назвати деякі: github, bitbucket.

У git ви отримали файл .gitignore, якщо ви додасте туди * .out, тоді він не буде переданий у сховище


Мені соромно ставити в Інтернеті весь код мого "першого дитини".
користувач341814

Gitlab та bitbucket отримали приватні репости. З іншого боку, якщо ви помістите його там, де побачить громадськість, ваш код стане кращим, оскільки ви, як правило, будете краще кодером. Удачі! :)
3h4x

1

Я не надто зрозумілий у вашому першому запитанні. Якщо ви хочете перейменувати , program.outщоб programпотім просто запустити:

mv program{.out,}

Для другого питання, якщо припустити, що я хочу отримати список файлів у /etcсуфіксі:

#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
   if [[ $line =~ \..+ ]]; then
      echo $line
   fi
done < /tmp/etcfiles

Ви можете скоригувати вищезазначене, як потрібно.

  • \. відповідає буквальному періоду.
  • . відповідає будь-якому символу, що слідує за періодом.
  • +говорить, що принаймні один персонаж повинен слідувати початковому періоду. Таким чином, це буде відповідати test.c, але ні. test.Якщо ви хочете також відповідати test., то змініть +на "a" *.

0

Якщо ви використовуєте bash як оболонку, це просте завдання для конвеєра оболонки.

ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done

ls створює список файлів у каталозі.

grep '\.out$' витягує назви файлів, які закінчуються .out, і відкидає решту.

while read file читає назви файлів по черзі.

echo mv "$file" "${file%.*}"відображає, але не виконує команду mv, яка б перейменовувала кожен файл у версію без його розширення. ${file%.*}Бізнес Баш синтаксис для зачистки від розширення файлу. Коли ви переконаєтесь у тому, що трубопровід зробить те, що ви хотіли, якби він був запущений по-справжньому, видаліть echoдеталь і дайте їй працювати реально.

ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done

Але як зробити так, щоб сценарій ігнорував ці файли, коли вони не мають розширення .out?
користувач341814

Використовуйте testкоманду. test -xуспішно, якщо для дозволів файлу встановлено біт виконання.
Кайл Джонс

Це здається трохи важким ... чи не могли б ви мені допомогти з написанням цього? Тож у мене є тест, чи він виконується ... а якщо ні, скопіюйте його.
користувач341814

Чи можете ви мені допомогти? Я думав, що я суть її, але зараз це просто не працює.
користувач341814
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.