как найти скрытый файл - PullRequest
       17

как найти скрытый файл

3 голосов
/ 19 декабря 2010

У меня есть несколько файлов, они названы так

.abc efg.txt 
.some other name has a dot in front.txt
......

и я хочу сделать что-то подобное

for i in `ls -a` ; do echo $i; done;

я ожидал, что результат будет

.abc efg.txt
.some other name has a dot in front.txt

но получается куча беспорядка .. как я могу получить эти скрытые файлы ???

спасибо

Ответы [ 3 ]

4 голосов
/ 19 декабря 2010

Вместо использования ls используйте сопоставление с шаблоном оболочки:

for i in .* ; do echo $i; done;

Если вы хотите, чтобы все файлы, скрытые и обычные, делали:

for i in * .* ; do echo $i; done;

(Обратите внимание, что это также получитВы . и .., если вы не хотите, чтобы те, которые вы должны были отфильтровать, также обратите внимание, что этот подход не работает, если нет (скрытых) файлов, в этом случае вам также придется отфильтровать * и .*)

Если вам нужны все файлы и вы не возражаете против использования bash определенных параметров, вы можете уточнить это, установив dotglob и nullglob.dotglob заставит * также найти скрытые файлы (но не . и ..), nullglob не вернет *, если нет подходящих файлов.Так что в этом случае вам не нужно будет выполнять фильтрацию:

shopt -s dotglob nullglob
for i in * ; do echo $i; done;
2 голосов
/ 19 декабря 2010

, чтобы избежать . и .., вы можете сделать:

find . -name ".*" -type f -maxdepth 1 -exec basename {} ";"

Это напечатает то, что вы хотите. Если вам нужно сделать что-то большее, чем echo, просто укажите это как аргумент для exec.

for fname in .*; do echo $fname; done; будет печатать . и ...

1 голос
/ 20 мая 2014

Чтобы найти скрытые файлы, используйте find:

find . -wholename "./\.*"

Чтобы исключить их из результата:

find . -wholename "./\.*" -prune -o -print

И еще один способ обработки целых файлов с пробелами - это рассматривать их как строки:

ls -1a | while read aFileName
do
  echo $aFileName
done
...