Saya memiliki direktori yang diisi dengan berbagai file, yang dinamai berbeda (yaitu tidak dinamai dengan pola tertentu) dan dengan ekstensi yang berbeda, dan saya ingin meletakkan setiap file dalam subdirektori yang baru dibuat dinamai setiap file; apa cara terbaik untuk mencapainya dari baris perintah di Linux?
Ini kedengarannya agak membingungkan, izinkan saya membuat dan contoh: mari kita memanggil file acak di direktori ./filename.ext
, saya ingin meletakkannya di subdirektori yang disebut ./filename
sehingga secara efektif jalan baru akan ./filename/filename.ext
.
Saya melakukan beberapa percobaan dengan langkah-langkah berikut:
- Saya telah membuat beberapa file uji, dari
file-1.txt
hinggafile-9.txt
, di dalam direktori pengujian denganfor num in {1..9}; do touch file-$num.txt; done
- Saya telah membuat direktori bernama setelah setiap nama file dengan
for name in $(eval ls | cut -b 1-6); do mkdir $name; done
- Saya telah memindahkan file sumber di direktori masing-masing
for name in $(eval ls | grep -e ".txt" | cut -b 1-6); do mv $name.txt $name/$name.txt; done
Seperti yang Anda lihat, solusi ini berfungsi, tetapi kelemahannya adalah ia berfungsi hanya dalam kasus ini, dengan file dengan nama file yang panjang dan dengan ekstensi tertentu. Jika saya memiliki beberapa file dengan nama dan ekstensi yang berbeda, ini tidak akan berguna sama sekali. Penggunaan cut
perintah bukanlah solusi yang ideal di sini, saya kira, tetapi saya belum menemukan sesuatu yang lebih baik saat ini.
Sebagai bonus, akan lebih baik untuk menemukan cara untuk membuat subdir secara otomatis ketika memindahkan / mengganti nama file, tanpa harus menggunakan mkdir
sebelumnya (jadi ketika saya ls
benar-benar mengganti nama, saya tidak perlu khawatir mengecualikan direktori yang baru dibuat. ); tetapi pada akhirnya ini adalah masalah sekunder.