Самый быстрый способ создать 1000 папок одну внутри другой и поместить файл в последнюю папку

Я написал код для поиска определенного файла, где пользователь вводит starting path и filename, а затем программа печатает свои данные, если файл существует, или печатает not found в противном случае.

Код основан на рекурсии. Я хочу протестировать его с большой иерархией папок, скажем, 1000 папок, одна внутри другой, и поместить файл с именем david.txt в 1000-ю папку.

Как я могу это сделать, не создавая папки 1000 раз в течение следующих 3 часов?

Код написан в C, под Ubuntu.

Спасибо


person JAN    schedule 16.06.2012    source источник
comment
@ErickWong: Действительно: python -c 'print "tst/" * 1000' | xargs mkdir -p   -  person C2H5OH    schedule 17.06.2012
comment
Имя папки должно быть коротким — Linux поддерживает пути длиной до 4096 символов. Я не уверен, насколько хорошо все будет / не будет работать, когда вы преодолеете эту отметку.   -  person Michael Burr    schedule 17.06.2012


Ответы (4)


Введите следующее в вашей оболочке:

mkdir -p folder$( seq -s "/folder" 999 )1000

Затем вы можете войти в эту папку:

cd folder$( seq -s "/folder" 999 )1000

и создайте файл:

touch david.txt

и вернитесь к своему предыдущему каталогу:

cd -
person Krizz    schedule 16.06.2012
comment
Спасибо, но вывод для команды 1st: a@ubuntu:~/Desktop$ mkdir -p folder$( seq -s "/folder" -t 1000 999 ) seq: invalid option -- 't' Try seq --help' for more information. - person JAN; 17.06.2012
comment
@ron - тогда, вероятно, seq в вашем дистрибутиве не поддерживает аргумент -t. Используйте обновленную версию - person Krizz; 17.06.2012
comment
Я так и сделаю - спасибо. Кстати, как я могу получить доступ к папке 1000th для создания файла? так как после ввода написанной вами команды 2nd я получил File name too long . 10x снова! - person JAN; 17.06.2012
comment
@ron - см. мой комментарий к вашему вопросу - вам нужно, чтобы имена папок были короткими, чтобы не превышать ограничение размера пути Linux. - person Michael Burr; 17.06.2012

Как описано в некоторых комментариях, я бы использовал оболочку для таких целей:

#!/bin/sh

for i in $(seq 1000)
do
    mkdir tst
    cd tst
done
touch david.txt

Что касается связанной темы, позвольте мне предложить эту статью, который показывает, как иногда сценарии оболочки могут решить ваши проблемы за гораздо меньшее время разработки. Специально для специальных задач, подобных этой.

person C2H5OH    schedule 16.06.2012

Простой цикл bash:

$ pushd .
$ for i in {1..1000}; do
      mkdir d$i;
      cd d$i;
  done

$ touch david.txt
$ popd
person pb2q    schedule 16.06.2012

Используйте тот же код (почти) для создания папок и файлов. Как только это работает, поиск/отчетность также почти завершены. Это своего рода самопроверка :)

person Martin James    schedule 16.06.2012