Подтвердить что ты не робот

Используя "touch" для создания каталогов?

1) в каталоге "A":

find . -type f > a.txt

2) в каталоге "B":

cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done

3) Результат: 2) "создает файлы" [я имею в виду только с тем же именем файла, но с размером байта 0). Но если в каталоге "А" есть поддиры, то 2) не может создавать файлы в поддире, потому что в нем нет каталогов.

Вопрос: есть ли способ, чтобы touch мог создавать каталоги?

4b9b3361

Ответ 1

Так как find выводит один файл в строке:

cat a.txt | while read file; do
    if [[ "$file" = */* ]]; then
        mkdir -p "${file%/*}";
    fi;

    touch "$file";
done

EDIT:

Это будет немного более эффективно, если каталоги, созданные на отдельном шаге:

cat a.txt | grep / | sed 's|/[^/]*$||' | sort -u | xargs -d $'\n' mkdir -p

cat a.txt | while read file; do
    touch "$file";
done

И, нет, touch не может создавать каталоги самостоятельно.

Ответ 2

Нет. Почему не просто использовать mkdir вместо touch для каталогов?