2016-07-27 6 views
0

Kann mir jemand erklären, warum, wenn ich die Variable $ file_name im folgenden Skript drucke, zeigt es den Speicherort und nicht nur den Dateinamen? Es ist nicht unbedingt eine schlechte Sache, weil ich versuche, den Speicherort, die md5sum und den Dateinamen getrennt zu drucken, aber ich bin an dieser Stelle verwirrt, warum das den Standort druckt.while loop read Befehl druckt den Speicherort und nicht nur den Dateinamen - warum ist das so?

hier ist die Textdatei:

day19-pgm-am_0946-23_p1_13.mov 
day19-pgm-am_0951-23_p1_14.mov 
day19-pgm-am_1016-23_p1_19.mov 
day19-pgm-am_1021-23_p1_20.mov 
day19-pgm-am_1111-23_p1_30.mov 

.

#!/bin/bash 


file=/location/md5sum.txt 


while IFS=, read -ra arr; do 
    while IFS= read -r -d '' file_name; do 
     md5=($(md5sum "$file_name")) 
     printf '%s\n' "$file_name $md5" 
    done < <(find . -name "${arr[0]}" -print0) 
done<"$file" 

hier ist die aktuelle Ausgabe, wie Sie die Daten zeigen die Dateien releative Standort sehen:

./level1/level2/day19-pgm-am_0946-23_p1_13.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/day19-pgm-am_0946-23_p1_13.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/level2/day19-pgm-am_0951-23_p1_14.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/day19-pgm-am_0951-23_p1_14.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/level2/day19-pgm-am_1016-23_p1_19.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/day19-pgm-am_1016-23_p1_19.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/level2/day19-pgm-am_1021-23_p1_20.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/day19-pgm-am_1021-23_p1_20.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/level2/day19-pgm-am_1111-23_p1_30.mov d41d8cd98f00b204e9800998ecf8427e 
./level1/day19-pgm-am_1111-23_p1_30.mov d41d8cd98f00b204e9800998ecf8427e 
+0

zumindest einige Inhalte von 'csv' Datei abgeschnitten wird und die Ausgabe, die Sie in das Verständnis hilfreich sein, bekam könnte dein Skript. – Fazlin

+0

aktualisiert mit dieser Info – neilH

+0

ist nicht Ihr 'find' Befehl wird den Pfadnamen zurückgeben? – tale852150

Antwort

2

$file_name Sie von find immer ist der relative Pfad zu der von gefundenen Datei finden, indem Das Verzeichnis zu finden.

Sie können das Verzeichnis und den Dateinamen wie diese:

directory=`dirname $file_name` 
just_filename=`basename $file_name` 

Und diese drucken.

+0

Danke Ich habe das gerade in mein Skript aufgenommen und es funktioniert gut. – neilH

0

Versuchen Sie dies;

#!/bin/bash 

file=/location/md5sum.txt 


while IFS=, read -ra arr; do 
    while IFS= read -r -d '' file_name; do 
     md5=($(md5sum "$file_name")) 
     printf '%s\n' "$(basename $file_name) $md5" 
    done < <(find . -name "${arr[0]}" -print0) 
done<"$file" 
0

Sie können auch string operators verwenden:

printf '%s\n' "${file_name##*/} $md5" 

Dies alles bis zum letzten /

Verwandte Themen