Как пройти через каждый файл в папке? - PullRequest
1 голос
/ 28 октября 2011

У меня есть папка под названием экзамен. Эта папка имеет 3 папки, которые называются математикой, физикой и английским языком. У всех этих папок есть некоторые подпапки и файлы в них. Я хочу пройти через каждую папку и распечатать путь каждой папки и файла в другом файле, называемом файлами. Я сделал это:

#!/bin/bash

LOC="/home/school/exam/*"

{
  for f in $LOC 
  do
   echo $f
  done
 } > "files"

Выход, который я получаю:

/ дом / школа / экзамен / математика

/ дом / школа / экзамен / физик

/ дом / школа / экзамен / английский

Я не могу понять, как сделать посещение кода и сделать то же самое с подпапками экзамена. Какие-либо предложения?

PS Я только начинающий в написании сценариев оболочки.

Ответы [ 5 ]

3 голосов
/ 28 октября 2011
find /home/school/exam -print > files
2 голосов
/ 28 октября 2011

С опцией globstar bash будет повторять все имена файлов в подкаталогах при использовании двух соседних звездочек

использование:

shopt -s globstar
for i in /home/school/exam/**

Ссылка здесь man bash:

globstar
                      If set, the pattern ** used in a pathname expansion context
                      will match all files and zero or more directories and
                      subdirectories.  If the pattern is followed by a /, only
                      directories and subdirectories match.

и info bash:

          *      Matches any string, including the null string.  When  the
                 globstar  shell  option  is  enabled,  and * is used in a
                 pathname expansion context, two adjacent  *s  used  as  a
                 single  pattern  will  match  all  files and zero or more
                 directories and subdirectories.  If followed by a /,  two
                 adjacent  *s  will match only directories and subdirecto‐
                 ries.
0 голосов
/ 28 октября 2011

Вы также можете использовать команду tree, которая включена в большинство * nix-дистрибутивов. (Хотя Ubuntu является заметным исключением - но может быть установлен через apt-get)

LOC="/home/school/exam/"
tree -if $LOC > files
0 голосов
/ 28 октября 2011

Как насчет этого, чтобы вывести список всех ваших файлов рекурсивно.

for i in *; do ls -l $i ; done
0 голосов
/ 28 октября 2011

вы можете использовать команду find, она может получить все файлы, затем вы можете что-то с ними сделать, например, с помощью exec или xargs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...