Saya memiliki struktur folder ini:
├── foo1
│ ├── bar1.txt
│ └── bar2.txt
├── foo2
│ ├── bar3.txt
│ └── bar4 with a space.txt
└── foo3
└── qux1
├── bar5.txt
└── bar6.txt
bahwa saya ingin meratakan ini, dengan garis bawah di antara setiap tingkat folder:
├── foo1_bar1.txt
├── foo1_bar2.txt
├── foo2_bar3.txt
├── foo2_bar4 with a space.txt
├── foo3_qux1.bar6.txt
└── foo3_qux1_bar5.txt
Saya telah melihat-lihat dan saya belum menemukan solusi yang berfungsi, kebanyakan saya pikir karena masalah saya memiliki dua kekhasan: mungkin ada lebih dari satu level folder di dalam root dan juga karena beberapa file mungkin memiliki ruang.
Adakah yang tahu bagaimana melakukannya di bash? Terima kasih!
Sunting : Menjalankan gleen jackman jawaban yang diajukan saya dapatkan ini:
Ada dua garis bawah untuk folder tingkat pertama. Adakah yang tahu bagaimana cara menghindari ini atau hanya mengganti namanya jadi itu hanya satu garis bawah? Terima kasih.
sumber
foo1__qux1_bar5.txt
, dua garis bawah di tingkat folder pertama itu. Sudah mencoba main-main dengan bash line Anda tapi sepertinya tidak ada yang berhasil. Mungkin saya perlu menambahkan sesuatu?"${file//\//_}"
menjadi"${file//+(/)/_
, dan jika ini adalah naskah,shopt -s extglob
brew install findutils
dan kemudian menggunakangfind
alih-alihfind
. Ini berhasil untuk saya.Menggunakan nama perl:
KELUARAN
CATATAN
(?<!\.)
untuk tidak menyentuh yang pertama./
Saya menyimpan dir kosong, jangan ragu untuk:
find . -depth -type d -exec rm {} \;
Ada alat lain dengan nama yang sama yang mungkin atau mungkin tidak dapat melakukan ini, jadi berhati-hatilah.
Jika Anda menjalankan perintah berikut (
GNU
)dan Anda memiliki hasil seperti
dan tidak mengandung:
maka ini tampaknya menjadi alat yang tepat =)
Jika tidak, untuk menjadikannya default (biasanya sudah terjadi)
Debian
dan turunannya sepertiUbuntu
:(ganti
/path/to/rename
ke jalurperl's rename
perintah Anda .Jika Anda tidak memiliki perintah ini, cari manajer paket Anda untuk menginstalnya atau melakukannya secara manual
Terakhir, alat ini awalnya ditulis oleh Larry Wall, ayah Perl.
sumber
-type d -exec rmdir
...perl-rename
di Arch Linux, danprename
dalam sistem berbasis Debian.rename
penjelasandengan
pax
...Itu akan membuat hardlink di direktori saat ini ke semua file di direktori turunannya dengan
_
untuk/
. Anda kemudian dapat memeriksa hasilnya dan menghapus semua direktori anak dengan ...... setelah Anda memverifikasi hasilnya sesuai dengan keinginan Anda.
sumber
Anda dapat mencoba dengan perintah di bawah ini.
Perintah di atas akan memindahkan file dan direktori akan tetap yang bisa dihapus nanti.
sumber