Ich habe Musik, die alle benannt ist 1 - (song author) - (song name).flac
und ich möchte den Dateinamen nur ändern (song author) - (song name).flac
Verschieben Sie es dann in ein Verzeichnis. Hier ist was ich bisher habe:
while IFS='' read -r line || [[ -n "$line" ]]; do
cp $line /home/user/Desktop/Music/$(cut -c3- "$line");
done < filelist.txt
filelist.txt enthält eine Liste der Dateien, die ich umbenennen und verschieben möchte.
Es funktioniert nicht, aber in gewisser Weise fand ich es interessant. Ich bekomme den Fehler bash: /bin/cp: Argument list too long
und nach Prüfung des Inhalts von line
Nach dem Schnitt sieht es aus wie zufällige Zeichen / Zeichencodes. Kann mir jemand sagen, was ich falsch mache?
linux
bash
file-management
btf1998
quelle
quelle
$line
? Woher stammt die Dateiliste, vielleicht ist sie Unicode?ls || grep flac > filelist.txt
. Ich würde lieber keine Inhalte von hinzufügen$line
. Es ist genau wie der Inhalt von/dev/random
ls | grep flac > filelist.txt
war eigentlich, wie die Datei erstellt wurde.Antworten:
cut
verwendet eine Datei oder stdin, und der Schalter -c steht für Zeichen, und Sie möchten höchstwahrscheinlich stattdessen Felder mit Leerzeichen. Außerdem müssen Sie das zweite Argument von cp in Anführungszeichen setzen. Und Sie müssen -c5- angeben, um Folgendes zu entfernen:quelle