Klasörleri csv dosyasındaki eşleşmelerine göre yeni bir dizine nasıl taşırım?


1

Mevcut dizimde F1, F2, F3, F4, F5, F6, F7, F8, F9, F10 gibi birçok klasör var.

Klasör adları ile bir sütunu olan mevcut dizinde "dan.csv" adlı bir csv dosyası var.

csv dosyası aşağıdaki gibi görünüyor: Sütun adı "id"

id
F1
F4
F5
F6
F8
F10

Csv dosyasındaki eşleşmelerine dayanarak, klasörleri yeni bir "DAN" dizinine taşımak istiyorum.

Bunu yapmak için aşağıdaki gibi denedim:

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

Bu herhangi bir hataya neden olmadı ve klasörleri "DAN" dizinine de taşımadı.

Yanıtlar:


0

Basit bir bash whiledöngüsü yeterlidir:

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

CSV dosyasındaki her satırı okuyan, satırı IFSdeğişkende ayarlanan karaktere böler ve bu çizginin her değerini while döngüsünün başlığında belirtilen karşılık gelen değişkenlerde saklar.

While döngüsünün başlığını (tüm sütunların listelendiği yerde) CSV dosyanızın başlığına sığdırdığınızdan emin olun. Muhtemelen diğer sütunların değerlerine ihtiyacınız yoktur, ancak yine de bunları okumak önemlidir, aksi halde CSV'deki her değer bir iddeğer olarak değerlendirilir. CSV dosyanız diğerlerinden farklıysa ;, belirli karakteri döngüden IFS=önce -value olarak ayarladığınızdan emin olun while.

dan.csvKimliğinizin üçüncü olduğu dört sütununuz varsa, şu şekilde yaparsınız:

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

Benim csv dosyamda klasör adlarına sahip sadece bir tane "id" sütunu var. Yani bu şekilde vermek işe yarıyor mu? kimliği okurken; mv $ id DAN /; <dan.csv
acemi

Evet, sadece bir sütununuz varsa, yapmanız gereken tek şeywhile read i; do ...
LukeLR

Böyle bir hatam var. mv: 'DAN /' den sonra eksik hedef dosya operand'ı. Daha fazla bilgi için 'mv --help' komutunu deneyin.
Yeni başlayanlar

Değiştir mv $id DAN/tarafından echo $idtest amaçlı. Csv dosyasında saklanan tüm klasör adlarını, aralarında boş bir satır olmadan yazmalıdır. Boş satırlar varsa mv, elbette başarısız olur, çünkü en az 2 operaya ihtiyaç duyar.
LukeLR

boş satırlar yazdırıyor
acemi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.