Первая проблема заключается в том, что ваш первый, если оператор имеет неверный пункт тестирования. Оператору -eq
[
необходимо принять один аргумент до и после; ваш аргумент исчез или пуст.
Вторая проблема заключается в том, что я думаю, что echo
является избыточным.
Третья проблема заключается в том, что команда file
всегда имеет выход ASCII, но вы проверяете двоичный вывод, который вы никогда не увидите.
Использование file
довольно умное для этого приложения, хотя есть два способа вы можете это сделать; file
говорит, что различные вещи и то, что вас интересует, это data
и ASCII
, но не все файлы, которые не идентифицируются как data
, являются ASCII, и не все файлы, которые не идентифицируются как ASCII
, являются данными. Возможно, вам лучше пойти с оригинальной идеей использования grep
, если вам не нужно поддерживать файлы Unicode. Ваш grep
немного странно для меня, так что я не знаю, что ваша среда, но я мог бы попробовать это:
#!/bin/bash
for file in "/home/osboxes/Parkhom"/*
do
if grep -qP '[\0x80-\0xFF]' $file; then
[ -e "$1" ] && mv $file $1
fi
done
Опция -q
означает быть спокойным, только возвращает код возврата, не показывают матчи , (Это может быть -s
в вашем grep
.) Код возврата проверяется непосредственно оператором if
(нет необходимости использовать [
или test
). &&
в следующей строке - это просто быстрый способ сказать, если левая сторона истинна, а затем выполните правую часть. Вы также можете сформировать это как оператор if
, если найдете это более четким. [
является синонимом для test
. Лично, если $1
является каталогом и не изменяется, я бы проверил его один раз в начале скрипта, а не на каждом файле, это было бы быстрее.
Что вы подразумеваете под «не-ASCII» файлом? Вы ищете файлы, содержащие байты, которые выходят за пределы области 7-разрядного ASCII? Если код, который вы используете, не работает, что он делает, а не работает? Есть ли ошибки, которые вы можете добавить к своему вопросу? Пожалуйста, ознакомьтесь с [** how-to-ask **] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, как улучшить этот вопрос, а также помочь при создании [* * MCVE **] (http://stackoverflow.com/help/mcve). – ghoti
Этот код перемещает все файлы ... вместо ASCII или не-ASCII –
Код должен найти файлы ASCII в папке или не-ASCII и переместить их –