Как я могу найти свой пароль?

Команда «find» vesion

Ваш скрипт может быть выполнен как команда с одним слоем find, без необходимости синтаксического анализа ls или возиться с глобусами и т. д.

Ваша цель, по мнению читателя, состоит в том, чтобы сделать копии всех файлов в текущем каталоге. Для этого подходящей командой будет:

find . -maxdepth 1 -mindepth 1 -exec cp {} {}".old" \;

Что это значит, что find работает со всеми файлами в каталоге . (текущий) и вызывает cp для каждого файла (следовательно [ f13]). Поскольку find является рекурсивным, мы должны ограничить глубину поиска, поэтому флаг -maxdepth и -mindepth должен избегать перечисления . в качестве одного из результатов поиска.

Пример прогона:

$ touch "file one"  "file two"                                                 
$ find . -maxdepth 1 -mindepth 1 -exec cp {} {}".old" \;                       
$ ls -1                                                                        
file one
file one.old
file two
file two.old
$ 

ПРИМЕЧАНИЕ. cp все равно будет жаловаться на каталоги. Есть несколько способов справиться с этим.

1) вы можете отфильтровать только файлы, если это ваша цель с флагом -type f в find, подобным

find . -mindepth 1 -maxdepth 1 -type f -exec cp {} {}".old" \;

2) Используйте cp -r для создания копий каталогов а также

find . -mindepth 1 -maxdepth 1 -exec cp -r {} {}".old" \;

Однострочный Python

Это немного длиннее, чем find, но все же выполняет задание и не имеет проблем со специальными именами файлов.

python -c 'import shutil; import os;[shutil.copyfile(f,f + ".old") for f in os.listdir(".") if os.path.isfile("./" + f)]'

Пример прогона:

$ touch "test file 1" "testfile 2"
$ python -c 'import shutil;import os;[shutil.copyfile(f,f + ".old")
> for f in os.listdir(".")
> if os.path.isfile("./" + f)]'
$ ls -1  
test file 1
test file 1.old
testfile 2
testfile 2.old
$ 

Чтобы включить каталоги, используйте shutil.copytree(source,destination)

python -c 'import shutil; import os;[shutil.copyfile(f,f + ".old") if os.path.isfile("./" + f) else shutil.copytree(f,f + ".old") for f in os.listdir(".")]'

Обратите внимание, что это не удастся, если вы скажете directory_one.old/ уже существует

0
задан 25 January 2012 в 22:38

0 ответов

Другие вопросы по тегам:

Похожие вопросы: