找到所有修改过的svn文件,并将修改过的文件复制到同一文件夹结构中

找到所有修改过的svn文件,并将修改过的文件复制到同一文件夹结构中

svn st | grep ^M我使用命令获取所有修改的 svn 文件

M       student/includes/class_student_promotion.php
M       student/includes/class_student_report.php
M       student/resources/js/student_co_scholistic_activities.js
M       staff/php/edit_staff_details.php
M       library/includes/class_book_return.php
M       library/includes/class_book_item_stock_entry.php
M       library/includes/class_library_common_function.php
M       library/includes/auto_book_name_list.php
M       library/includes/class_book_issue.php
M       library/php/book_item_details_entry.php
M       includes/connection.php
M       includes/links.php
M       staff_student/php/student_time_table.php
M       assignment/php/ajax_created_assignment_report.php
M       assignment/php/ajax_submitted_assignment_report.php
M       student_attendance/php/date_wise_attendance_summary_report.php
M       student_attendance/resources/js/holiday_master.js

我的要求是我希望将输出中列出的文件复制到同一文件夹结构中。就像包含要创建的文件夹一样,并且svn st只需复制其中列出的文件。

这个命令

cp `svn st | ack '^M' | cut -b 8-` backup

可以将所有修改的文件复制到一个目录,但我期望的是我希望还应该创建保存修改的文件的文件夹

答案1

假设文件夹是指目录,并且文件和目录名称中没有空格或特殊字符:

svn st | ack '^M' | cut -b 8- | cpio -pdmv backup

这是cpio直通模式 ( -p)。它需要从标准输入复制文件名列表。-d允许它创建目录、-m保留修改时间并-v使其变得冗长。 stdin 上的任何文件名都会被复制到目标目录,student/includes/class_student_promotion.php将被复制到backup/student/includes/class_student_promotion.php

相关内容