Исключить системные записи с помощью "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