Das erste Problem ist, dass Ihre erste if-Anweisung eine ungültige Test-Klausel hat. Der Operator -eq
von [
muss ein Argument vor und nach dem Argument nehmen; Dein Vorher-Argument ist weg oder leer. Das zweite Problem ist, dass ich denke, echo
ist redundant.
Das dritte Problem ist, dass der Befehl file
immer ASCII-Ausgabe hat, aber Sie auf binäre Ausgabe überprüfen, die Sie nie sehen werden.
Verwenden file
ziemlich schlau für diese Anwendung, obwohl es zwei Möglichkeiten gibt, die Sie weitermachen können; file
sagt eine Vielzahl von Dingen und was Sie interessiert sind data
und ASCII
, aber nicht alle Dateien, die nicht als data
identifizieren sind ASCII und nicht alle Dateien, die nicht als ASCII
identifizieren sind Daten. Sie könnten besser mit der ursprünglichen Idee der Verwendung von grep
gehen, es sei denn, Sie müssen Unicode-Dateien unterstützen. Ihr grep
ist ein bisschen mir fremd, damit ich weiß nicht, was Ihre Umgebung ist, aber ich könnte versuchen, diese:
#!/bin/bash
for file in "/home/osboxes/Parkhom"/*
do
if grep -qP '[\0x80-\0xFF]' $file; then
[ -e "$1" ] && mv $file $1
fi
done
Die -q
Option bedeutet, ruhig sein, geben nur einen Return-Code, zeigen nicht die Spiele . (Es könnte -s
in Ihrem grep
sein.) Der Rückkehrcode wird direkt durch die if
Anweisung geprüft (keine Notwendigkeit, [
oder test
zu verwenden). Die &&
in der nächsten Zeile ist nur eine schnelle Art zu sagen, ob die linke Seite wahr ist, dann führen Sie die rechte Seite aus. Sie können dies auch als if
-Anweisung formulieren, wenn Sie das klarer finden. [
ist ein Synonym für test
. Persönlich, wenn $1
ein Verzeichnis ist und sich nicht ändert, würde ich es einmal am Anfang des Skripts anstatt für jede Datei überprüfen, es wäre schneller.
Was meinen Sie mit einer "Nicht-ASCII" -Datei? Suchen Sie nach Dateien, die Bytes enthalten, die außerhalb des Bereichs von 7-Bit-ASCII liegen? Wenn der Code, den Sie ausführen, nicht funktioniert, was macht er statt zu arbeiten? Gibt es Fehler, die Sie zu Ihrer Frage hinzufügen können? Bitte werfen Sie einen Blick auf [** how-to-ask **] (http://stackoverflow.com/help/how-to-ask) für Tipps zur Verbesserung dieser Frage sowie die Hilfe beim Erstellen eines [* * MCVE **] (http://stackoverflow.com/help/mcve). – ghoti
Dieser Code verschiebt alle Dateien ... statt ASCII oder Nicht-ASCII –
Code sollte ASCII-Dateien in Ordner oder Nicht-ASCII finden und verschieben Sie sie –