Вам не нужно искать в grep код цвета, опция -d
- это только список каталогов
.
Похоже, это делает то, что вы хотите:
$ tree --du -d -shaC | grep -Ev '( *[^ ]* ){2}\['
.
├── [ 18] dir1
├── [ 30] dir2
├── [ 205] junk
│ ├── [ 18] dir1
│ ├── [ 30] dir2
│ └── [ 76] dir3
├── [ 119] merge
└── [ 20] stuff
4.4K used in 10 directories
Команда grep
удаляет все строки, в которых дважды встречается (один или более пробелов, за которыми следует не пробел, за которым следует пробел), а затем [
.
Если вам нужна глубина 1, измените количество ссылок внутри фигурных скобок {} на {1}
, а не на {2}
. То же самое, если вам нужна глубина 3, измените ее на {3}
.
Вы можете превратить это в функцию оболочки, например, так:
mytreedu() {
local depth=''
while getopts "L:" opt ; do
case "$opt" in
L) depth="$OPTARG" ;;
esac
done
shift "$((OPTIND-1))"
if [ -z "$depth" ] ; then
tree --du -d -shaC "$@"
else
local PATTERN='( *[^ ]* ){'"$depth"'}\['
tree --du -d -shaC "$@" | grep -Ev "$PATTERN"
fi
}
Это использует getopts
для "кражи" любой опции -L
и ее аргумента из командной строки tree
, если таковая имеется. Если в командной строке нет опции -L n
, то это тоже работает.
Все остальные опции и args передаются команде tree
.
Строка local PATTERN=...
строка на самом деле не нужна. Я сделал ее такой только для того, чтобы убедиться, что она поместится на одной строке и не будет разрываться на слова здесь, на U&L
. Регулярное выражение может и, вероятно, должно просто идти непосредственно на tree | grep ...
строке.
Запустите его следующим образом:
mytreedu
или
mytreedu -L 2 /path/to/dir/
Вы вообще не можете, если вы заранее не знаете, какой SID будет у вашего пользователя при новой установке Windows (, что непредсказуемо, как UID в системах UNIX ).
Предполагая, что у вас есть какой-то способ узнать, какой у вас будет SID, вы можете функционально воспроизвести права собственности и базовые ACE, используя обычные команды UNIX и функцию сопоставления имен пользователей NTFS -3G. См. раздел «Сопоставление пользователей» справочной страницы NTFS -3G для получения информации о том, как это настроить. После того, как это настроено, вы можете использовать обычные команды UNIX для управления владельцем и основными разрешениями файлов (IIRC, разрешение на чтение POSIX преобразуется в разрешения Windows «Чтение» и «Чтение и выполнение», а запись POSIX преобразуется в «Изменить»., но больше ничего не помню ).
Насколько мне известно, из Linux невозможно скопировать все Windows ACE.
Небольшое замечание: возможно, вы также захотите скопировать альтернативные потоки данных NTFS. Вы можете легко сделать это с помощью инструментов UNIX, которые поддерживают Linux xattrs (при условии, что вы не укажете параметр streams-interface
для NTFS -3G, по умолчанию они будут отображаться как xattrs ).