Я'вэ были изучать программирование с действительно прохладной вводная книга К С и я списываю каждый пример и задача что я могу выучить синтаксис наизусть. Я делала каждый файл вручную до сих пор, но нажатием, присвоение имени и сохранение становится утомительно.
Мне нужен способ, чтобы создать несколько файлов, таких как bspl0001.с
, bspl0002.с
, bspl0003.С
, и т. д. и сохранять их в каталог "и learning_c" или что-то.
Я'м нуб в Ubuntu / Linux и честно только запускаю через VirtualBox и потому, что среда разработки Geany был прост в настройке. Таким образом, я не'т действительно знаю, как терминал работает.
редактировать я'вэ просто нашли себя в этом старый аккаунт мой и я качая головой о том, почему я бы хотел выучить синтаксис кода наизусть. Как ни странно, я почти сделал с моим КС / исследования по математике и BSC. Спасибо за помощь в ретроспективе!
Вы можете сделать это с помощью этих команд:
mkdir learning_c
cd learning_c
touch bspl{0001..0003}.c
команды mkdir learning_c
Это создаст папку под названием learning_c
в текущей папке
Текущую папку, как правило, является ваша домашняя папка также называется ~
Вы можете изменить текущий каталог с помощью команды компакт
(т. е. компакт столе
)
диск learning_c `
Да, вы можете угадать его, вы'вновь поступающих на вновь созданную папку
на ощупь bspl{0001..0003}.с
"трогать" - это инструмент для создания пустых файлов и изменение метки времени; мы'повторно создавать пустые файлы.
на ощупь файл myfile будет создать пустой файл с названием класса
.
Гадкий кода (bspl{0001..0003}.с
) называется расширение расчалка. Это отличная возможность для Баш
оболочки, что позволяет создавать длинные списки произвольных комбинаций строк. Вы можете узнать больше об этом в Баш Вики хакеров. В этом случае вы будете делать длинный список параметров, которые будут переданы в "Контакте". Вы также можете использовать его длительный эквивалент:
сенсорный bspl0001.bspl0002 с.с bspl0003.с
bspl{0001..0012}.с
.0012
вместо 12
) убедитесь, что на выходе пользы ноль-уплотненный 4-х цифр.Зачем создавать все файлы сразу? Недостатком является то, что у вас будет много пустых и неиспользуемых файлов. Что я на самом деле с помощью: нажать комбинацию клавиш, чтобы:
Все в одно нажатие. Таким образом, вы предотвратите множество (до сих пор) неиспользуемые файлы; файлы создаются только если вы в них нуждаетесь.
Упрощенная версия ниже (не работает Шаг 3). На каждое нажатие, это создать правильно пронумерованы файл, как:
bspl0001.c, bspl0002.c, bspl0003.c etc
в
#!/usr/bin/env python3
import os
#--- set your code directory below
dr = "/path/to/your/coding_files"
#--- set the desired (base) name extension and shebang below (leave it ""if you don't want an automatically set shebang)
name_initial = "bspl"
extension = ".c"
shebang = ""
#---
existing = os.listdir(dr)
n = 1
while True:
file = dr+"/"+name_initial+str(n).zfill(4)+extension
if os.path.exists(file):
n = n+1
else:
with open(file, "wt") as out:
out.write(shebang)
break
питон3 /path/to/create_empty.py
Вы можете использовать следующий код на Python, вы можете изменить его, чтобы соответствовать вашим потребностям.
Сохраните следующий код с именем filecreator.py
в
#!/usr/bin/env python
import os
import subprocess
work_path = os.path.abspath(os.path.dirname(__file__))
if not os.path.exists("learning_c"):
os.mkdir("learning_c")
os.chdir(os.path.expanduser(work_path+"/learning_c"))
n = 10 #put the number as you wish
for i in range(n):
subprocess.call(['touch', "bsdl"+str(i).zfill(4)+".c"])
А затем выполнить его с помощью этой команды:
python filecreator.py
В Баш
хороша, но что если вы работаете с оболочкой, что не'т поддерживать фигурной скобкой расширение ? сенсорный файл{1..10}
Не't работа для меня на лету
, например. Здесь's три альтернативных способов, которые работают независимо от оболочки.
Более раковины-нейтральный подход можно было бы объединить команду далее
, чтобы генерировать последовательность чисел, форматированных С Е
параметры , и передать его команда размер
. Например,
$ ls -l
total 0
$ seq -f "%04.0f" 10 | xargs -I "{}" touch bspl"{}".c
$ ls
bspl0002.c bspl0004.c bspl0006.c bspl0008.c bspl0010.c
bspl0001.c bspl0003.c bspl0005.c bspl0007.c bspl0009.c
Конечно, на Perl , будучи довольно инструмент widespred *Никс, может сделать это также. Конкретные один-лайнер команды, что мы имеем здесь следующие:
perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5
Эффективно то, что происходит здесь заключается в том, что мы указываем командной строки 3 аргумента: префикс имени файла, начиная с индекса и заканчивая индексом. Затем мы используем у { } на $массива argv[1] .. $массива argv[2]
, чтобы выполнить итерации для определенного диапазона чисел. Сказать, $массива argv[1]
5 лет `$массива argv[2] - 9 лет, мы бы перебрать 5,6,7,8 и 9.
Что происходит на каждой итерации в фигурные скобки ? мы каждый число, указанное С $_
, и с помощью функции sprintf()функция создания строки М. сращивания префикс (первый аргумент командной строки,
$argv[0] В) и дали номер, но заполнять номер с 4 нулями (что делается на
е-стиль форматирования
%04дчасть), и прикрепить.с суффиксом.В результате на каждой итерации мы делаем имя как
bspl0001.с`.
Открыть(мой $FН, и" >”, в переменной $var);закрыть($FН)
эффективно действует как команда прикосновение
, создавая файл с указанным именем.
Немного длительным он вполне выполняет, в моде, похожими на Яков Vlijm'ы скрипт на Python. Он также может быть преобразован в сценарий для читабельности при желании, вот так:
в
#!/usr/bin/env perl
use strict;
use warnings;
for my $i ( $ARGV[1] .. $ARGV[2] ) {
my $var=sprintf("%s%04d.c",$ARGV[0],$i );
open(my $fh, ">", $var) or die "Couldn't open " . $var ;
close($fh) or die "Couldn't close " . $var ;
}
Позволяет проверить это. Сначала один-лайнер:
$ ls -l
total 0
$ perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5
$ ls -l
total 0
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0001.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0002.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0003.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0004.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0005.c
И теперь скрипт:
$ ls -l
total 4
-rwxrwxr-x 1 xieerqi xieerqi 244 2月 5 23:57 touch_range.pl*
$ ./touch_range.pl bspl 1 5
$ ls -l
total 4
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0001.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0002.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0003.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0004.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0005.c
-rwxrwxr-x 1 xieerqi xieerqi 244 2月 5 23:57 touch_range.pl*
Другой подход-С в awk
, выполняется цикл for, перенаправление на конкретный файл. Подход похож на Perl и один-вкладыш с аргументами командной строки. В то время как в awk
это прежде всего текст, утилита для обработки, он все еще может сделать какой-нибудь классный системного программирования.
$ awk 'BEGIN{for(i=ARGV[2];i<=ARGV[3];i++){fd=sprintf("%s%04d.c",ARGV[1],i); printf "" > fd;close(fd)}}' bslp 1 5