Глобализация файлов в Linux
Вступление
Оболочка также отвечает за глобализацию файлов (или динамическую генерацию имени файла). На этом занятии мы рассмотрели глобализацию файлов Linux.
Звездочкой (*)
Звездочка * интерпретируется оболочкой как знак для генерации имен файлов, сопоставляя звездочку любой комбинации символов (даже ни одной). Когда путь не указан, оболочка будет использовать имена файлов в текущем каталоге. Смотрите man-страницу glob (7) для получения дополнительной информации. (Это часть темы LPI 1.103.3.)
datasoft @ datasoft-linux ~$ ls
ABC.png part1
ajax-php-mysql-user-interface.html part2
count part3
Desktop Pictures
Documents png
Downloads Public
examples.desktop sqlite3
file2 sqlite-amalgamation-3080500 (2)
FileA sqlite-amalgamation-3080500.zip
FileB sqlite-shell-linux-x86-3080500.zip
linux-command-past-date.png summer.png
mno.txt Summer.png
Music Templates
MyDir test1
MyDir1 test2
MyDirA text2
Myfile1.doc typescript
MYFILE1.doc Untitled 1.odt
MYFILE2.doc Videos
MyTest xyz.txt
datasoft @ datasoft-linux ~$
datasoft @ datasoft-linux ~$ ls File*
FileA FileB
datasoft @ datasoft-linux ~$ ls file*
file2
datasoft @ datasoft-linux ~$ ls *ext2
text2
datasoft @ datasoft-linux ~$ ls M*
Myfile1.doc MYFILE1.doc MYFILE2.doc
Music:
MyDir:
otherstuff stuff test test2
MyDir1:
file1 file2 FileA
MyDirA:
FileA
MyTest:
file1 file1~ file2 FileA
datasoft @ datasoft-linux ~$
вопросительный знак(?)
Похоже на звездочку, знак вопроса? интерпретируется оболочкой как знак для генерации имен файлов, сопоставляя знак вопроса ровно с одним символом.
datasoft @ datasoft-linux ~$ ls
ABC.png part1
ajax-php-mysql-user-interface.html part2
count part3
Desktop Pictures
Documents png
Downloads Public
examples.desktop sqlite3
file2 sqlite-amalgamation-3080500 (2)
FileA sqlite-amalgamation-3080500.zip
FileB sqlite-shell-linux-x86-3080500.zip
linux-command-past-date.png summer.png
mno.txt Summer.png
Music Templates
MyDir test1
MyDir1 test2
MyDirA text2
Myfile1.doc typescript
MYFILE1.doc Untitled 1.odt
MYFILE2.doc Videos
MyTest xyz.txt
datasoft @ datasoft-linux ~$ ls File?
FileA FileB
datasoft @ datasoft-linux ~$ ls Fil??
FileA FileB
datasoft @ datasoft-linux ~$ ls Fi???
FileA FileB
datasoft @ datasoft-linux ~$
квадратные скобки ( [] )
Квадратная скобка [интерпретируется оболочкой как знак для генерации имен файлов, соответствующих любому из символов между [и первым последующим]. Порядок в этом списке между скобками не важен. Каждая пара скобок заменяется ровно одним символом.
Вы также можете исключить символы из списка в квадратных скобках с восклицательным знаком! И вам разрешено составлять комбинации из этих джокеров.
datasoft @ datasoft-linux ~$ ls
ABC.png part1
ajax-php-mysql-user-interface.html part2
count part3
Desktop Pictures
Documents png
Downloads Public
examples.desktop sqlite3
file2 sqlite-amalgamation-3080500 (2)
FileA sqlite-amalgamation-3080500.zip
FileB sqlite-shell-linux-x86-3080500.zip
linux-command-past-date.png summer.png
mno.txt Summer.png
Music Templates
MyDir test1
MyDir1 test2
MyDirA text2
Myfile1.doc typescript
MYFILE1.doc Untitled 1.odt
MYFILE2.doc Videos
MyTest xyz.txt
datasoft @ datasoft-linux ~$ ls File[5A]
FileA
datasoft @ datasoft-linux ~$ ls file [a5][Z!]
bash: !]: event not found
datasoft @ datasoft-linux ~$ ls file[!3]*
file2
datasoft @ datasoft-linux ~$ ls test[!3]*
test1
test2:
apti test2 test2.txt
аз и 0-9 диапазоны
Оболочка bash также будет понимать диапазоны символов в скобках.
datasoft @ datasoft-linux ~$ ls
ABC.png ajax-php-mysql-user-interface.html
Desktop count
Documents examples.desktop
Downloads file2
FileA linux-command-past-date.png
FileB mno.txt
MYFILE1.doc part1
MYFILE2.doc part2
Music part3
MyDir png
MyDir1 sqlite-amalgamation-3080500 (2)
MyDirA sqlite-amalgamation-3080500.zip
MyTest sqlite-shell-linux-x86-3080500.zip
Myfile1.doc sqlite3
Pictures summer.png
Public test1
Summer.png test2
Templates text2
Untitled 1.odt typescript
Videos xyz.txt
datasoft @ datasoft-linux ~$ ls file [a-z]*
ls: cannot access file: No such file or directory
ajax-php-mysql-user-interface.html png
count sqlite-amalgamation-3080500.zip
examples.desktop sqlite-shell-linux-x86-3080500.zip
file2 summer.png
linux-command-past-date.png test1
mno.txt text2
part1 typescript
part2 xyz.txt
part3
sqlite-amalgamation-3080500 (2):
shell.c sqlite3.c sqlite3.h sqlite3ext.h
sqlite3:
sqlite-autoconf-3080500 sqlite-autoconf-3080500.tar.gz
test2:
apti test2 test2.txt
datasoft @ datasoft-linux ~$ ls file[0-9]
file2
datasoft @ datasoft-linux ~$
$ LANG и квадратные скобки
Но не забывайте о влиянии переменной LANG. Некоторые языки включают строчные буквы в верхнем регистре (и наоборот).
datasoft @ datasoft-linux ~$ ls [A-Z]ile?
file2 FileA FileB
datasoft @ datasoft-linux ~$ ls [a-z]ile?
file2 FileA FileB
datasoft @ datasoft-linux ~$ echo $LANG
en_IN
datasoft @ datasoft-linux ~$ LANG=C
datasoft @ datasoft-linux ~$ echo $LANG
C
datasoft @ datasoft-linux ~$ ls [a-z]ile?
file2
datasoft @ datasoft-linux ~$ ls [A-Z]ile?
FileA FileB
datasoft @ datasoft-linux ~$
Если установлено значение $ LC_ALL, то это также необходимо будет сбросить, чтобы предотвратить сбои файлов.
предотвращение файловых ошибок
Скриншот ниже не должен удивлять. Эхо * будет эхо *, когда в пустой директории. И он будет отображать имена всех файлов, когда каталог не пуст.
datasoft @ datasoft-linux ~$ mkdir test10
datasoft @ datasoft-linux ~$ cd test10
datasoft @ datasoft-linux ~/test10$ echo *
*
datasoft @ datasoft-linux ~/test10$ touch file10 file25
datasoft @ datasoft-linux ~/test10$ echo *
file10 file25
datasoft @ datasoft-linux ~/test10$
Глобализация может быть предотвращена с помощью кавычек или экранирования специальных символов, как показано на этом скриншоте.
datasoft @ datasoft-linux ~/test10$ echo *
file10 file25
datasoft @ datasoft-linux ~/test10$ echo \*
*
datasoft @ datasoft-linux ~/test10$ echo '*'
*
datasoft @ datasoft-linux ~/test10$ echo "*"
*
datasoft @ datasoft-linux ~/test10$
Упражнение, практика и решение:
1. Создайте тестовый каталог и введите его.
Код:
mkdir testdir; cd testdir
2. Создайте файлы file1 file10 file11 file2 File2 File3 file33 fileAB filea fileA fileAAA file (file
2 (последний содержит 6 символов, включая пробел)
Код:
touch file1 file10 file11 file2 File2 File3
touch file33 fileAB filea fileA fileAAA
touch "file("
touch "file 2"
3. Перечислите (с помощью ls) все файлы, начинающиеся с file
Код:
ls file*
4. Перечислите (с помощью ls) все файлы, начинающиеся с File
Код:
ls File*
5. Перечислите (с помощью ls) все файлы, начиная с файла и заканчивая номером.
Код:
ls file*[0-9]
6. Перечислите (с помощью ls) все файлы, начиная с файла и заканчивая буквой
Код:
ls file*[a-z]
7. Перечислите (с помощью ls) все файлы, начиная с File и имеющие цифру в качестве пятого символа.
Код:
ls File[0-9]*
8. Перечислите (с помощью ls) все файлы, начиная с File и имеющие цифру в качестве пятого символа и ничего больше.
Код:
ls File[0-9]
9. Перечислите (с помощью ls) все файлы, начиная с буквы и заканчивая цифрой.
Код:
ls [a-z]*[0-9]
10. Перечислите (с помощью ls) все файлы, которые имеют ровно пять символов.
Код:
ls ?????
11. Перечислите (с помощью ls) все файлы, которые начинаются с f или F и заканчиваются на 3 или A.
Код:
ls [fF]*[3A]
12. Перечислите (с ls) все файлы, которые начинаются с f, имеют i или R в качестве второго символа и заканчиваются числом.
Код:
ls f[iR]*[0-9]
13. Перечислите все файлы, которые не начинаются с буквы F.
Код:
ls [!F]*
14. Скопируйте значение $ LANG в $ MyLANG.
Код:
MyLANG=$LANG
15. Показать влияние $ LANG на перечисление диапазонов AZ или az.
Код:
see example in book
16. Вы получаете информацию о том, что один из ваших серверов был взломан, возможно, взломщик
заменил команду ls. Вы знаете, что команда echo безопасна для использования. Может заменить эхо
лс? Как вы можете перечислить файлы в текущем каталоге с эхо?
Код:
echo *
17. Есть ли другая команда помимо cd для смены каталогов?
Код:
pushd popd
Предыдущая: История Linux Shell
Далее: перенаправление ввода / вывода в Linux
Новый контент: Composer: менеджер зависимостей для PHP , R программирования