Копия файла оболочки Unix, сглаживающая структуру папок

На оболочке удара UNIX (конкретно Mac OS X Leopard), каков был бы самый простой способ скопировать каждый файл, имеющий определенное расширение от иерархии папок (включая подкаталоги) к той же папке назначения (без подпапок)?

Очевидно, существует проблема наличия дубликатов в исходной иерархии. Я не возражал бы, если они перезаписываются.

Пример: Я должен скопировать каждый .txt файл в следующей иерархии

/foo/a.txt
/foo/x.jpg
/foo/bar/a.txt
/foo/bar/c.jpg
/foo/bar/b.txt

К папке, названной 'dest' и доберитесь:

/dest/a.txt
/dest/b.txt
39
задан Mo. 26 August 2008 в 10:23
поделиться

1 ответ

Приведенные выше ответы не допускают конфликтов имен, поскольку спрашивающий не возражал против перезаписи файлов.

Я не возражаю против перезаписи файлов, поэтому придумал другой подход. Заменив каждый / в пути на - сохраните иерархию в именах и поместите все файлы в одну плоскую папку.

Мы используем find для получения списка всех файлов, затем awk для создания команды mv с исходным именем и измененным именем файла, а затем передаем их в bash для выполнения.

find ./from -type f | awk '{ str=$0; sub(/\.\//, "", str); gsub(/\//, "-", str); print "mv " $0 " ./to/" str }' | bash

где ./from и ./to - это каталоги, из которых и в mv.

11
ответ дан 27 November 2019 в 02:27
поделиться
Другие вопросы по тегам:

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