GNU/Linux >> Belajar Linux >  >> Ubuntu

Ganti Nama File Menjadi Nama Direktori Induk Di Terminal?

Saya harus berurusan dengan sejumlah besar file yang bersarang di dalam direktori (satu file per direktori), seperti ini:

fred/result.txt
john/result.txt
mary/result.txt
...

Saat ini saya menggunakan perintah berikut untuk memproses setiap file tersebut:

find . -maxdepth 1 -type d ( ! -name . ) -exec bash -c "cd '{}' && processResult result.txt" ;

Saya mencari sesuatu yang dapat saya tambahkan di akhir perintah ini yang akan mengubah nama file menjadi fred.txt , dll. dan kemudian pindahkan file ke direktori induk untuk menghilangkan lapisan direktori tambahan.

Apa cara terbaik untuk melakukan ini?

Jawaban yang Diterima:

Kita dapat menggunakan pendekatan klasik :find dengan while read kombo:

Demo:

$ ls *
fred:
results.txt

jane:
results.txt

john:
results.txt

$> find . -type f -name "results.txt" -printf "/%Pn" | while read FILE ; do DIR=$(dirname "$FILE" );                            
>  mv ."$FILE" ."$DIR""$DIR".txt;done                                                                                             
$> ls
fred/  jane/  john/
$> ls *
fred:
fred.txt

jane:
jane.txt

john:
john.txt

Gunakan echo sebelum menggunakan mv untuk menguji baris dengan file Anda.

Peningkatan kecil

Kami dapat menyematkan panggilan ke bash ke exec , dengan ekspansi parameter (khususnya penghapusan awalan). Pada dasarnya itu menyematkan skrip ke dalam panggilan exec.

$> find "$PWD" -type f -name "results.txt" -exec bash -c ' DIR=$( dirname "{}"  ); echo "{}" "$DIR"/"${DIR##*/}".txt  ' ;                
/home/xieerqi/TESTDIR/fred/results.txt /home/xieerqi/TESTDIR/fred/fred.txt
/home/xieerqi/TESTDIR/jane/results.txt /home/xieerqi/TESTDIR/jane/jane.txt
/home/xieerqi/TESTDIR/john/results.txt /home/xieerqi/TESTDIR/john/john.txt

Untuk membuat perintah menjadi umum, (berfungsi untuk file apa pun, bukan hanya results.txt ) hapus saja -name "results.txt" bagian. Lihat juga posting ini untuk solusi alternatif Python untuk ini.


Ubuntu
  1. Apakah Mv Atomic Di Fs?

  2. Ganti Nama Mass File Bash Dengan Penghitung?

  3. Simpan Semua Output Terminal Ke File?

  1. Untuk Loop Dengan Nama File?

  2. Cara Mengganti Nama Domain

  3. Bagaimana Mengganti Nama File di Linux?

  1. Skrip shell Linux untuk menambahkan angka nol di depan nama file

  2. Memindahkan file di Linux ke C

  3. temukan file yang memiliki nomor dalam nama file lebih besar dari