フォルダ内のすべてのファイルをどのようにトラバースするのですか?

私は試験と呼ばれるフォルダを持っています。このフォルダには、math、physics、englishという3つのフォルダがあります。これらのフォルダには、すべてサブフォルダとファイルがあります。私はすべてのフォルダを通り抜け、すべてのフォルダとファイルのパスをファイルと呼ばれる別のファイルに出力したい。私はこれをやった:

#!/bin/bash

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

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

私が得る出口は:

/ home/school/exam/math

/ home/school/exam/physics

/ home/school/exam/english

私はどのようにコードを訪問し、試験のサブフォルダに同じことを行う方法を把握することはできません。助言がありますか?

PS私はシェルスクリプトの初心者です。

1

5 答え

find /home/school/exam -print > files
3
追加された
あなたの質問が分かっている場合は、試験ディレクトリの親を作業ディレクトリとして test -print>ファイルを探すだけです。 〜/ exam を使用するのは、ホームディレクトリに exam ディレクトリがある人のみです。
追加された 著者 Michael Hoffman,
これは仕事をしている。しかし、今私はそれを考えると、私はチームの一員としてこのスクリプトをやっているし、チームの誰もが試験フォルダのための別のパスを持っているので、私はそれが動作するとは思わない。これをどのように修正できますか?私はfind */exam -print>ファイルを試しましたが、そのようなファイルやディレクトリはありません。
追加された 著者 captain,
Ok、find〜/ exam -print>ファイルに変更して動作します。しかし、それは確かに試験フォルダを持っている他のコンピュータで動作するでしょうか?
追加された 著者 captain,
彼らは試験ディレクトリを持っています。私はそれがうまくいくと思います。私はできるだけ早くそれをテストします。答えをありがとう。
追加された 著者 captain,

globstar オプションでは、隣接する2つの星を使用するときに、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.
2
追加された

あなたのすべてのファイルを再帰的にリストする方法は?

for i in *; do ls -l $i ; done
1
追加された

find コマンドを使用すると、すべてのファイルを取得できます。例えば、execやxargsを使って、何かをすることができます。

0
追加された

ほとんどの* nixディストリビューションに含まれている tree コマンドを使うこともできます。 (ただし、Ubuntuは注目に値する例外ですが、apt-getを使ってインストールできます)

LOC="/home/school/exam/"
tree -if $LOC > files
0
追加された