\b
только перемещает курсор, но не перезаписывает текст.
Один из вариантов записи списка, разделенного запятыми, в awk
— создать соответствующую запись и распечатать ее:
BEGIN {
OFS = ","
$0 = ""
for (i = 1; i <= 3; ++i)
$i = i
print
}
Вывод будет 1,2,3
.
И за одну -лайнерную толпу:
awk -vOFS=',' 'BEGIN { for (i = 1; i <= 3; ++i) $i = i; print }'
Установка $0
в пустую строку здесь не на самом деле необходима, так как у нас есть только блок BEGIN
и нет входных данных, поэтому я исключил его из варианта с одной строкой -.
Присваивание можно интерпретировать тремя способами:
.c
и .h
из текущего каталога в каталог Programs
или .c
и .h
файлы из текущего каталога или любого места под ним в каталог Programs
. .c
и.h
из любой точки системы в каталог Programs
. Обратите внимание, что в задании написано «копировать», а не «переместить». Это означает, что вы должны использовать команду cp
, а не mv
.
Первая интерпретация задания решается
cp *.[ch] Programs
(при условии, что *.[ch]
соответствует всем интересующим нас файлам, и в текущем каталоге их не много тысяч ).
Вторая интерпретация задания решается
find. -path./Programs -prune -o -type f -name '*.[ch]' -exec cp {} Programs \;
Ищет все обычные файлы с суффиксом имени файла .c
или .h
в текущем каталоге или ниже него и выполняет cp
для каждого такого файла. Мы не можем подключиться к cp
, так как эта утилита не читает свой стандартный входной поток.
Мы также стараемся избегать поиска внутри Programs
каталога (, который считается подкаталогом в текущем каталоге ). Если этого не сделать, это приведет к копированию файлов из Programs
в Programs
. Подробнее о -path
и -prune
см. в разделе «Объяснение пути поиска -и -параметров обрезки ».
Третью интерпретацию легко реализовать из второй:
find / -path "$PWD/Programs" -prune -o -type f -name '*.[ch]' -exec cp {} Programs \;
... нам просто нужно find
начать с вершины дерева каталогов и указать, что каталог Programs
, которого следует избегать, находится по пути $PWD/Programs
.
Это, скорее всего, вызовет ряд ошибок из-за того, что у вас нет доступа ко всему. Чтобы избежать этого, также удалите каталоги, к которым у вас нет доступа, и копируйте только те файлы, которые вы можете прочитать :
.find / \( -type d ! -executable -o -path "$PWD/Programs" \) -prune -o \
-type f -name '*.[ch]' -readable -exec cp {} Programs \;
Для этого требуется GNU find
для -executable
теста (каталог доступен для поиска, если он исполняемый )и тест -readable
.
Обратите внимание, что варианты find
здесь ограничат файлы только обычными файлами (через -type f
тест ), в то время как подход cp *.[ch]
будет копировать любой тип вещей, который заканчивается этими двумя символами.. Кроме того, решение find
будет копировать скрытые файлы (файлы с именами, начинающимися с точки ), в то время как первое решение не будет соответствовать этим типам имен по умолчанию.