GNU/Linux >> Belajar Linux >  >> Linux

Temukan file dan cetak hanya direktori induknya

Apakah saya kehilangan sesuatu di sini. Tentunya semua regex dan/atau perulangan ini tidak diperlukan, one-liner akan melakukan pekerjaan itu. Solusi "for foo in $()" juga akan gagal jika ada spasi di nama jalur.

Cukup gunakan dirname dua kali dengan xargs, untuk mendapatkan parent's parent...

# 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 {}

Menghasilkan

./hht
./wee1

Anda dapat melakukannya dengan mudah menggunakan opsi pemformatan dari -printf tindakan find (lihat man find ).

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

Dari halaman manual:

%h\n akan mencetak jalur untuk setiap file pada baris baru.

Harap dicatat bahwa -printf hanya untuk GNU. Ini tidak akan berfungsi di macOS (sistem BSD).


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

EDIT:Maaf ketinggalan bahwa Anda menginginkan direktori induk.


Linux
  1. Hapus File Dan Direktori Dengan Nama Mereka. Tidak ada berkas atau direktori seperti itu?

  2. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix

  3. Bagaimana cara memindahkan file dan direktori ke folder induk di Linux?

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Temukan File dan Direktori di Linux Seperti Profesional

  3. Temukan file dan direktori terbesar di Linux

  1. Temukan File atau Direktori Terbesar?

  2. Linux Hapus File dan Direktori

  3. Cara Menemukan dan Menghapus Direktori dan File Kosong di Linux