Узнайте, как опция globstar
в bash
может вам помочь:
shopt -s globstar ; for i in ** ; do echo "$i" ; done
Это должно дать вам отсортированный список всех элементов вашего дерева каталогов, но он будет включать записи (строк )как для файлов, так и для подкаталогов -.
Отфильтровать подкаталоги:
shopt -s globstar ; for i in ** ; do [ -f " $i" ] && echo "$i" ; done
Ввести счетчик и удалить суффиксы текущего файла:
cnt=1
shopt -s globstar
for i in ** ; do
[ -f "$i" ] && echo "${i%%.*}.$cnt"
cnt=$((cnt=cnt+1))
done
Замените оператор теста echo
на mv
по вашему выбору:
mv "$i" "${i%%.*}.$cnt"
При необходимости отключите параметр globstar
после завершения:
`shopt +s globstar`
Выполните первый вызов функции, чтобы уничтожить FIFO. Вам действительно все равно, если звонок потерпит неудачу или нет. Затем вызовитеmkfifo()
(и обязательно проверьте возвращаемое значение, чтобы убедиться, что операция прошла успешно.
этот первый вызов будет unlink()
Вот синтаксис:
#include <unistd.h>
int unlink(const char *pathname);
Вот описание со страницы MAN:
unlink ()удаляет имя из файловой системы. Если бы это имя было последним ссылка на файл, и ни один процесс не открывает файл, файл удаляется и пространство, которое он использовал, становится доступным для повторного использования.
Если имя было последней ссылкой на файл, но какие-либо процессы все еще файл открыт, файл будет существовать до тех пор, пока последний файл дескриптор, ссылающийся на него, закрыт.
Если имя относится к символической ссылке, ссылка удаляется.
Если имя относится к сокету, FIFO или устройству, имя для него удалены, но процессы, у которых открыт объект, могут продолжать использовать Это.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ В случае успеха возвращается ноль. При ошибке возвращается -1, а errno установить соответствующим образом.
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
*ОПИСАНИЕ mkfifo ()создает специальный файл FIFO с именем pathname. режим указывает разрешения FIFO. Он изменяется с помощью umask процесса в обычный способ :права доступа к созданному файлу: (режим и ~umask ).
Специальный файл FIFO подобен каналу, за исключением того, что он создается в по-другому. Вместо того, чтобы быть анонимным каналом связи, специальный файл FIFO вводится в файловую систему вызовом mkfifo ().
После того как вы таким образом создали специальный файл FIFO, любой процесс может открыть его для чтения или записи точно так же, как и обычный файл. Тем не менее, он должен быть открыт с обоих концов одновременно, прежде чем вы сможете приступить к выполнению любых операций ввода или вывода на нем. Открытие FIFO для чтение обычно блокируется до тех пор, пока какой-либо другой процесс не откроет тот же FIFO для письма и наоборот. См. fifo (7 )для неблокирующей обработки Специальные файлы FIFO.*
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ В случае успеха mkfifo ()и mkfifoat ()возвращают 0. В случае ошибки -Возвращается 1 (, и в этом случае errno устанавливается соответствующим образом ).