2014-09-24 5 views
0

Как известно, cp -r source_dir предназначенный_new_directory создает копию исходного каталога с новым именем. Теперь я хочу сделать то же самое, но хочу исключить конкретный файл. Я нашел здесь некоторые связанные ответы, используя tar и rsync, но в этих решениях мне нужно сначала создать каталог назначения (используя mkdir).
Я честно искал много, но не нашел именно то, что хочу.
До сих пор лучшее, что я получил это:копировать весь каталог, исключая файл

tar -c --exclude=\*.dll --exclude=\*.exe sourceDir | tar -x -C destDir 

(от http://www.linuxquestions.org/questions/programming-9/how-to-copy-an-entire-directory-structure-except-certain-files-385321/)

ответ

0

Попробуйте это, за исключением файла используя 'Grep -v' ->

cp `ls | grep -v <exclude-file>` <dest-dir> 
+1

Это не скопирует поддиректории .. вам необходимо соответствующим образом изменить команду. – dganesh2002

+0

извините, не понимаю команду. Где я могу поместить исходный каталог? – iloveX

+1

Здесь @ dganesh2002 копирует все файлы из каталога _current_ в целевой каталог. ОК, если нет подкаталогов, имена файлов не имеют пробелов, а количество файлов в текущем каталоге не слишком велико. – afenster

0

Если каталог не очень большой. Я писал что-то вроде этого:

src=path/to/source/directory 
dst=path/to/destination/directory 
find $src -type f | while read f ; do mkdir -p "$dst/`dirname $f`"; cp "$f" "$dst/$f" ; done 

Здесь мы перечислим все обычные файлы в $src, перебираем по этому списку и для каждого файла создаем каталог в $dst, если он еще не существует (-p вариант mkdir), а затем скопируйте файл в этот каталог.

Вышеприведенная команда скопирует все файлы. И, наконец, просто использовать

find $src -type f | grep -v whatever | while ...... # same as above 

, чтобы отфильтровать файлы вам не нужны (например, \.bak$, \.orig$, или любые файлы, которые вы не хотите скопировать).

0

Если у вас есть Binutils, вы могли бы использовать find фильтровать следующий cpio копировать (и создавать каталоги):

find <sourceDir> \(! -name *.dll \) -a \(! -name *.exe \) | cpio -dumpv <destDir> 
-1

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

#cd mydirectory 
#mv exclude1 exclude2 /home/ 
#cp mydirectory destination_folder/ 
#cd /home/ 
#mv eclude1 exclude2 mydirectory/ 
Смежные вопросы