Ответ 1
В окнах список только каталогов:
dir /ad /b /s
чтобы перечислить все файлы (и не каталоги):
dir /a-d /b /s
перенаправить вывод в файл:
dir /a-d /b /s > filename.txt
Я хотел бы получить следующий вывод.
Предположим, что структура каталогов в файловой системе выглядит так:
-dir1 -dir2 -file1 -file2 -dir3 -file3 -file4 -dir4 -file5 -dir5 -dir6 -dir7
Выход из script должен выглядеть следующим образом:
Каталоги:
/dir1 /dir1/dir2 /dir1/dir2/dir3 /dir1/dir2/dir4 /dir1/dir5 /dir1/dir5/dir6 /dir1/dir5/dir7
Файлы:
/dir1 /dir1/dir2/file1 /dir1/dir2/file2 /dir1/dir2/dir3/file3 /dir1/dir2/dir3/file4 /dir1/dir2/dir4/file5 /dir1/dir5/dir6 /dir1/dir5/dir7
Не могли бы вы рассказать мне, как сохранить вывод find . -type d
и find . -type f
в другой файл?
В окнах список только каталогов:
dir /ad /b /s
чтобы перечислить все файлы (и не каталоги):
dir /a-d /b /s
перенаправить вывод в файл:
dir /a-d /b /s > filename.txt
в оболочке:
find . -type d
предоставляет каталоги из текущего рабочего каталога и:
find . -type f
предоставляет файлы из текущего рабочего каталога.
Замените .
на интересующую вас директорию.
Каталоги:
find ./ -type d
Файлы:
find ./ -type f
Каталоги:
find ./ -type d > somefile.txt
Файлы:
find ./ -type f > somefile.txt
В Windows вы можете сделать это так же, как и большинство решений flexibile, которые позволяют вам дополнительно обрабатывать имена dir.
Вы используете FOR/R для рекурсивного выполнения командных команд.
Проверьте этот командный файл.
@echo off
SETLOCAL EnableDelayedExpansion
SET N=0
for /R %%i in (.) do (
SET DIR=%%i
::put anything here, for instance the following code add dir numbers.
SET /A N=!N!+1
echo !N! !DIR!
)
Символично для файлов вы можете добавить шаблон в виде набора вместо точки, в вашем случае
(*.*)
В Windows:
dir/ad/b/s
dir/a-d/b/s
В Linux простой
find . -printf '%y %p\n'
предоставит вам список всех содержащихся в нем элементов, в которых будут перемещены каталоги и файлы. Вы можете сохранить этот вывод во временном файле, а затем извлечь все строки, начинающиеся с 'd'; это будут каталоги. Строки, начинающиеся с "f", являются файлами.
Это старый вопрос, но я подумал, что что-то добавить.
DIR не правильно перемещает все деревья каталогов, которые вы хотите, в частности, не те, что на C:. Он просто уступает местам из-за разных защит.
ATTRIB работает намного лучше, потому что он находит больше. (Почему эта разница? Почему MS делает одну полезную работу одним способом, а другая работает по-другому в этом отношении? Проклятый, если я знаю.) По моему опыту, самый эффективный способ справиться с этим, хотя это kludge, состоит в том, чтобы получить два списка:
attrib/s/d C: \ > % TEMP%\C-with-directories.txt
attrib/s C: \ > % TEMP%\C-without-directories.txt
и получить разницу между ними. Это различие - это каталоги на C: (кроме тех, которые слишком хорошо скрыты). Для C:, обычно я делаю это как администратор.