Я пытаюсь записать сценарий, в котором вывод нужно назвать в честь его родительского каталога.
Исключая: у Меня есть 3 каталога, названные как 01.10.2018, 11.11.2018, 05.06.2018. В каждом каталоге, имеющем n количество файлов.
Я выполняю команду как указано ниже:
for D in */; do wc -l * > response.txt; done
Я был произведен в каждой папке, но с тем же именем т.е. response.txt.
Вещь, которую я хочу здесь, является этим response.txt
Должен быть назван в честь названия его родительского каталога.
Я предполагаю, что Вы хотите иметь своего рода "сводный файл", который содержит количество строки всех файлов в каждом соответствующем каталоге.
Используя шарики оболочки, как Вы сделал, это могло быть понято как это:
for directory in */ ; do
wc -l "$directory"/* > "$directory/$(basename "$directory").txt"
done
Во-первых, я изменил Ваш шарик для wc
для соответствия файлам в соответствующем каталоге вместо текущей папки как я предполагаю, это - то, что Вы хотите выполнить. Затем я составляю целевое имя файла путем замены выводом basename
команда, которая возвращает последний компонент из пути, который это получает как аргумент (например, "нечто" от "2018-11-16/foo /")
Обратите внимание однако, что в зависимости от Ваших опций оболочки, не все файлы могли бы быть подобраны. Скрытыми файлами по умолчанию (имя файла, запускающееся с a .
) проигнорированы, если Вы не установили dotglob
набор опции с shopt -s dotglob
.
Я не уверен точно, что Вы желающий сделать с "туалетом-l", так как это помещает тот же самый ответ в каждый файл response.txt. Вы надеющийся получать количество записей в рамках каждого каталога и помещать это в файл response.txt, связанный с тем каталогом? Если так, попробуйте это
for D in */; do
wc -l ${D}/* >${D}-response.txt
done
Это циклично выполнится через каждый каталог, получит общее количество объектов в каждом каталоге и сохранит вывод в файле, который запускается с имени каталога и концов в "-response.txt"
Надеюсь, это поможет.