Ответ 1
#!/bin/bash
FILES=/home/shep/Desktop/test/*
for f in $FILES
do
if [[ "$f" != *\.* ]]
then
DO STUFF
fi
done
В каталоге у вас есть несколько файлов - .txt
, .sh
, а затем планируйте файлы без модификатора .foo
.
Если вы ls
каталог:
blah.txt
blah.sh
blah
blahs
Как мне заставить for-loop использовать файлы без изменения .foo
? Итак, "делайте вещи" на файлах blah и blahs в приведенном выше примере.
Основной синтаксис:
#!/bin/bash
FILES=/home/shep/Desktop/test/*
for f in $FILES
do
XYZ functions
done
Как вы видите, это эффективно перекрывает все в каталоге. Как я могу исключить .sh
, .txt
или любой другой модификатор?
Я играл с некоторыми операторами if, но мне действительно интересно, могу ли я выбрать для этих не модифицированных файлов.
Также может кто-то сказать мне правильный жаргон для этих текстовых файлов без .txt?
#!/bin/bash
FILES=/home/shep/Desktop/test/*
for f in $FILES
do
if [[ "$f" != *\.* ]]
then
DO STUFF
fi
done
Если вы хотите, чтобы это было немного сложнее, вы можете использовать команду find.
Для текущего каталога:
for i in `find . -type f -regex \.\\/[A-Za-z0-9]*`
do
WHAT U WANT DONE
done
объяснение:
find . -> starts find in the current dir
-type f -> find only files
-regex -> use a regular expression
\.\\/[A-Za-z0-9]* -> thats the expression, this matches all files which starts with ./
(because we start in the current dir all files starts with this) and has only chars
and numbers in the filename.
Можно использовать отрицательные подстановочные знаки? для их фильтрации:
$ ls -1
a.txt
b.txt
c.png
d.py
$ ls -1 !(*.txt)
c.png
d.py
$ ls -1 !(*.txt|*.py)
c.png