Это перенаправления.
0 <& -
закрывает файловый дескриптор 0 (стандартный ввод). &>
перенаправляет и stdout, и stderr (в данном случае в файл журнала) Вы уверены, что не было echo
до $!
? $!
будет интерпретироваться как команда и, скорее всего, приведет к
-bash: 18552: command not found
Вы можете использовать awk
для поиска файлов, содержащих текст ASCII:
less $(file * | awk -F: '$2 ~ "ASCII text" {print $1}')
На самом деле это работает и для каталогов, содержащих несколько текстовых файлов.
Только для less
файла, если это текст ASCII:
less_if_text() {
# $1 is the file name
if file $1 | grep -q 'ASCII.* text' ; then
less $1
else
echo "Not a text file: $1"
fi
}
Чтобы вывести список текстовых файлов простым, но понятным способом:
ls_texts() {
ls -a | while read filename; do
(file $filename | grep -q 'ASCII.* text') && echo $filename
done
}
Вышеупомянутое не совсем быстро, однако. Более быстрый способ использовать file -f
, чтобы избежать множественных вызовов file
и grep
:
ls_texts() {
ls | file -f - | egrep ':\s+ASCII.* text' | while read fname
do cut -d ':' -f 1
done
}
Следующая функция bash просматривает файлы в текущем каталоге; если только один из них сообщает обратно как «текст ASCII», то он будет cat
этим файлом.
filecat() {
local files=(./*)
local count=0
local filename=
local f=
for f in "${files[@]}"
do
if file "$f" 2>/dev/null | grep -q ": ASCII text$"
then
count=$((count + 1))
filename="$f"
fi
done
if [ "$count" -eq 1 ]
then
cat "$filename"
fi
}
Вот безопасный способ открыть то, что file
считает текстовыми файлами в текущем каталоге в vim
. Конечно, вы можете изменить vim
на echo
, чтобы просто печатать имена.
#!/bin/bash
for f in *; do
out=$(file "$f")
[[ "${out##*: }" =~ ASCII ]] && text_files+=("$f")
done
vim "${text_files[@]}"
exit
РЕДАКТИРОВАТЬ :использовать два знака #
в расширении параметра для обработки имен файлов с :
в них.
С помощью zsh
вы можете определить такую функцию, как:
istext() [[ $(file -b --mime-type -- "${1-$REPLY}") = text/* ]]
Которые затем можно было бы использовать в квалификаторах glob, таких как:
less -- *(.L+0+istext)
Для просмотра не -пустых(L+0
длины больше 0 )обычных файлов(.
)в текущем каталоге, которые являются текстовыми в соответствии с file
.