Исключить системные записи с помощью "ls" или "find"

Сравните Cygwin:

$ ls -1 -N /cygdrive/c
$Recycle.Bin
cygwin64
Documents and Settings
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
System Volume Information
Users
Windows

С командной строкой:

> dir /A:-S C:
2018-12-08  10:14 AM    <DIR>          cygwin64
2009-07-13  09:20 PM    <DIR>          PerfLogs
2018-12-15  06:05 PM    <DIR>          Program Files
2018-12-15  05:21 PM    <DIR>          Program Files (x86)
2018-10-31  06:07 PM    <DIR>          ProgramData
2018-11-18  01:10 AM    <DIR>          Users
2018-11-09  08:18 AM    <DIR>          Windows

Как видно, в командной строке есть способ исключить элементы системы. Есть ли у Cygwin какой-нибудь способ сделать это, возможно, с помощью "ls" или "find"?

2 ответа

Вместо того ls Cygwin уже имеет lsattr для этой цели

$ lsattr /cygdrive/c
-hs--------- /cygdrive/c/$Recycle.Bin
------------ /cygdrive/c/cygwin64
lsattr: Device or resource busy while trying to open /cygdrive/c/pagefile.sys
------------ /cygdrive/c/PerfLogs
r----------- /cygdrive/c/Program Files
r----------- /cygdrive/c/Program Files (x86)
-h-------n-- /cygdrive/c/ProgramData
------------ /cygdrive/c/Python27
-hs------n-- /cygdrive/c/Recovery
-hs--------- /cygdrive/c/System Volume Information
r----------- /cygdrive/c/Users
------------ /cygdrive/c/Windows

Если вам нужно что-то сделать с файлами с определенными атрибутами или без них, просто используйте первое поле для фильтрации. Например, для работы с элементами с системным атрибутом:

$ for d in $(2>/dev/null lsattr /cygdrive/c | grep -P '^..s' | cut -d' ' -f2); do echo $d; done
/cygdrive/c/$Recycle.Bin
/cygdrive/c/Recovery
/cygdrive/c/System

Вы также можете использовать --long чтобы получить длинные атрибуты

$ lsattr --long /cygdrive/c
/cygdrive/c/$Recycle.Bin     Hidden, System
/cygdrive/c/cygwin64         ---
lsattr: Device or resource busy while trying to open /cygdrive/c/pagefile.sys
/cygdrive/c/PerfLogs         ---
/cygdrive/c/Program Files    Readonly
/cygdrive/c/Program Files (x86) Readonly
/cygdrive/c/ProgramData      Hidden, Notindexed
/cygdrive/c/Python27         ---
/cygdrive/c/Recovery         Hidden, System, Notindexed
/cygdrive/c/System Volume Information Hidden, System
/cygdrive/c/Users            Readonly
/cygdrive/c/Windows          ---

В качестве обходного пути я используюfdинструмент:

      C:\> fd -d 1
PerfLogs
Program Files
Program Files (x86)
Users
Windows
cygwin64

https://github.com/sharkdp/fd

Другие вопросы по тегам