кодесурса
«Linux

Глобализация файлов в Linux

script1adsense2code
script1adsense3code

Вступление

Оболочка также отвечает за глобализацию файлов (или динамическую генерацию имени файла). На этом занятии мы рассмотрели глобализацию файлов 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code