Bagaimana cara memindahkan folder ke direktori baru berdasarkan kecocokannya dalam file csv?

1

Dalam direktori saya sekarang, saya memiliki banyak folder seperti F1, F2, F3, F4, F5, F6, F7, F8, F9, F10.

Saya memiliki file csv "dan.csv" di direktori ini yang memiliki kolom dengan nama folder.

File csv terlihat seperti di bawah ini: Nama kolom adalah "id"

id
F1
F4
F5
F6
F8
F10

Berdasarkan kecocokan mereka dalam file csv saya ingin memindahkan folder ke direktori baru "DAN".

Untuk melakukan ini saya mencoba seperti di bawah ini:

xargs -a <(tail -n +2 dan.csv) -I{} sh -c '[ -d "{}" ] && mv -t DAN "{}"'

Ini tidak menimbulkan kesalahan dan juga tidak memindahkan folder ke direktori baru "DAN".

beginner
sumber

Jawaban:

0

Pesta sederhana while lingkaran cukup:

IFS=";"
while read othercolumn1 othercolumn2 ... id ... othercolumnx
do
    mv $id DAN/
done < dan.csv

Itu membaca setiap baris dari file CSV, membagi baris dengan karakter yang diatur dalam IFS variabel, dan menyimpan setiap nilai dari garis itu dalam variabel terkait yang ditentukan dalam header loop sementara.

Pastikan untuk memasukkan header loop sementara (di mana semua kolom terdaftar) ke header file CSV Anda. Anda mungkin tidak memerlukan nilai kolom lain, tetapi penting untuk membacanya, jika tidak, setiap nilai dalam CSV akan diperlakukan sebagai id nilai. Dari file CSV Anda dipisahkan oleh sesuatu selain ;, pastikan untuk menetapkan karakter spesifik sebagai IFS= -nilai sebelum while lingkaran.

Jika Anda dan.csv memiliki empat kolom di mana id adalah yang ketiga, Anda akan melakukannya seperti ini:

IFS=";"
while read othercolumn1 othercolumn2 id othercolumn4
do
    mv $id DAN/
done < dan.csv
LukeLR
sumber
Dalam file csv saya, hanya ada satu kolom "id" dengan nama folder. Jadi memberikan cara ini bekerja? saat membaca id; lakukan mv $ id DAN /; selesai & lt; dan.csv
beginner
Yap, jika Anda hanya memiliki satu kolom, Anda hanya perlu melakukannya while read i; do ...
LukeLR
Saya mendapat kesalahan seperti ini. mv: operan file tujuan yang hilang setelah ‘DAN / 'Coba' mv --help 'untuk informasi lebih lanjut.
beginner
Menggantikan mv $id DAN/ oleh echo $id untuk tujuan pengujian. Seharusnya mencetak semua nama folder yang disimpan dalam file csv tanpa ada baris kosong di antaranya. Jika ada garis kosong, mv tentu saja gagal, karena membutuhkan setidaknya 2 operan.
LukeLR
itu mencetak garis kosong
beginner