NABLY
означает, что Базовая монтажная система должна игнорировать варианты, которые не понимают, вместо того, чтобы не поучаствовать в целом. Это обычно используется в сочетании с NFS Automount, что приводит к второму вопросу: автоматический изменение.
Automount
используется для автоматической установки файловой системы при необходимости, вместо того, чтобы все это установить все время; опять обычно используется с NFS. Просто делая LS -L
LS -L MountPoint ... Чтобы удалить их, проверьте / etc / auto. *
файлы, начните с auto.master
который может ссылаться на другие файлы. После изменения этих файлов вам нужно перезагрузить autofs
.
Как уже упоминалось, найти
обычно является правильным инструментом при работе с файлами. Однако это может быть совершенно нормально.
Вы можете пропустить эту часть printf
, если хотите, только включите ее как bonus :P
Одна вещь, которую вы также можете начать использовать, это printf
. Как правило, это лучшая опция, чем echo
. В простейшем виде у вас есть:
printf "Some text\n"
где \n
- новая строка. Если вы хотите распечатать какую-либо переменную, вы можете использовать специальный символ %s
(для строки):
printf "Name is %s \n" "$name"
| |
| +---- value
+---------------- format string
printf "Name is %s city is %s \n" "$name" "$city"
| | |
| +-------+----- values
+------------------------------------ format string
Есть и другие символы, которые вы можете использовать, например, %d
(для цифры). Можно также использовать другие специальные символы, например \t
(табуляция).
Для вашего кода, как правило, лучше использовать более новый $(cmd)
вместо ``cmd`. В вашем коде это будет:
$(ls *.txt)
Следующее, на что стоит обратить внимание, это цикл for
. Ваше утверждение
for n in `ls *.txt`; do
не делает того, что вы думаете. Здесь n
рассматривается как имя переменной, которой присваивается результат ls *.txt
. Если у вас есть файлы:
a.txt
b.txt
c.txt
Выполнение кода расширится до:
for n in a.txt b.txt c.txt; do
То есть: для каждой итерации n
устанавливается следующее имя файла. В итоге:
n=a.txt (first loop)
n=b.txt (second loop)
n=c.txt (last loop)
Если мы соберем это вместе, то, например, сможем написать что-нибудь вроде этого:
#!/bin/bash
printf "Write the file extension you want to search for: "
read ext
printf "Searching for files with extension '%s'\n" "$ext"
for file in *"$ext"; do
printf "File: %s\n" "$file"
done
Или вы можете просто сказать:
ls *"$ext"
Обратите внимание, что звездочка - это за пределами кавычек. В противном случае она не будет расширяться.
Вы должны использовать Найти
. Что-то вроде как:
echo "Write the file extension you want to search for:"
read n
find . -name "*.$n"
В любом случае, то, что вы, вероятно, намеревались сделать:
for i in *."$n"
do
echo "$i"
done
В противном случае вы не используете значение n
(вместо этого используя фиксированное расширение TXT
) и перезаписать значение чтения N
в для цикла
,
Вы можете сделать Это:
#!/bin/bash
echo -n "Write the file extension you want to search for:"
read n
find $1 -iname "*.$n" -print
Использование:
./myscript.sh mypath
Выход:
root@debian:/home/mohsen/test# ./myscript.sh /home/mohsen
Write the file extension you want to search for:sh
/home/mohsen/Downloads/binary files/apt-fast_aria2c.sh
/home/mohsen/Downloads/binary files/apt-fast.sh
/home/mohsen/Downloads/binary files/toggle_touchpad.sh
/home/mohsen/Downloads/binary files/nvidia-versions.sh
/home/mohsen/Downloads/R/x/PacketTracer601/set_ptenv.sh
/home/mohsen/codes/IraninCalendar/test/jcal-master/sources/ltmain.sh
/home/mohsen/codes/IraninCalendar/test/jcal-master/sources/autogen.sh
^C
поиск расширения файла Andy я хочу, а затем отображать, сколько из Их есть
Вам не нужна цикла для этого вообще. Предполагая, что нет новичков символов в именах файлов вы можете написать
wc -l < <(ls *."$n")
Однострочная команда:
echo "Enter file extension:"
for f in `find <some_path> -name "*$(read n; echo $n)"` ; do echo $f ; done