GNU/Linux >> Linux の 問題 >  >> Linux

ファイルを検索し、その親ディレクトリのみを出力します

ここで何か不足していますか?確かに、このすべての正規表現やループは必要ありません。ワンライナーで十分です。また、パス名にスペースがある場合、「for foo in $()」ソリューションは失敗します。

親の親を取得するには、xargs で dirname を 2 回使用するだけです...

# make test case
mkdir -p /nfs/office/hht/info
mkdir -p /nfs/office/wee1/info
touch /nfs/office/hht/info/.user.log
touch /nfs/office/wee1/info/.user.log

# parent's parent approach
cd /nfs//office/ && find . -name '.user.log' | xargs -I{} dirname {} | xargs -I{} dirname {}

# alternative, have find print parent directory, so dirname only needed once...
cd /nfs//office/ && find . -name ".user.log" -printf "%h\n"  | xargs -I{} dirname {}

プロデュース

./hht
./wee1

-printf の書式設定オプションを使用すると、これを簡単に行うことができます find のアクション (man find を参照) ).

cd /nfs//office/ && find . -name '.user.log' -printf "%h\n"
./hht/info
./wee1/info

マニュアルページから:

%h\n 各ファイルのパスを新しい行に出力します。

-printf に注意してください GNUのみです。 macOS (BSD システム) では動作しません。


for file in $(find /nfs/office -name .user.log -print)
do
    parent=$(dirname $(dirname $file))
    echo $parent
done

編集:祖父母のディレクトリが必要だったことを見逃して申し訳ありません.


Linux
  1. 最大のファイルまたはディレクトリを見つけますか?

  2. Linux ファイルとディレクトリの削除

  3. Unix で空のディレクトリとファイルを見つけて削除する方法

  1. ファイルを検索してコピーする

  2. ubuntu /bash の下でファイルとディレクトリの名前を再帰的に変更します

  3. ディレクトリを検索し、正規表現に一致するファイルを見つけるにはどうすればよいですか?

  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. プロのようにLinuxでファイルとディレクトリを探す

  3. ファイルを見つけてそのサイズを合計するにはどうすればよいですか?