如何在linux中执行自定义复制命令?

时间:2012-04-19 17:12:28

标签: linux command-line copy putty cp

我必须将一些文件从一个目录移动到另一个目录,但这有点棘手。

这是我的文件夹结构

/var/www/media_test1/media001/001_pm_001.jpg
                              th001_pm_001.jpg

/var/www/media_test1/media002/002_pm_001.jpg
                              th002_pm_001.jpg

/var/www/media_test1/media003/003_pm_001.jpg
                              th003_pm_001.jpg

/var/www/media_test1/media004/004_pm_001.jpg
                              th004_pm_001.jpg

我基本上想将每个没有th的文件夹中的图片移动到另一个目录中,如下所示:

/var/www/media_test2/media001/001_pm_001.jpg
/var/www/media_test2/media002/002_pm_001.jpg
/var/www/media_test2/media003/003_pm_001.jpg
/var/www/media_test2/media004/004_pm_001.jpg

我在想的是通过使用s ls命令列出所有图片及其没有th的路径 - >来创建我要移动的图像列表。将其导出到文件 - >构建一个cp命令,如:

cp /var/www/media_test1/media001/001_pm_001.jpg /var/www/media_test2/media001/001_pm_001.jpg
cp /var/www/media_test1/media002/002_pm_001.jpg /var/www/media_test2/media001/002_pm_002.jpg
...

然后执行命令。

问题是我不知道如何编写这些命令。

有更好的方法吗?关于我可以使用哪些命令的任何想法?

感谢

3 个答案:

答案 0 :(得分:2)

您可以使用find命令执行此操作。确保目标目录存在,然后运行:

find /var/www/media_test1/media001/ -type f -not -name "th*" -exec cp {} /var/www/media_test2/media001/ \;

这将找到所有不以“th”开头的文件并将它们复制到/ var / www / media_test2 / media001 /.

答案 1 :(得分:1)

如果您不需要mmv过于灵活,可以使用{{3}}:

mmv '/var/www/media_test1/media???/???_pm_*.jpg' '/var/www/media_test2/media#1#2#3/#4#5#6_pm_#7.jpg'

这不会创建目标文件夹;你必须先做到这一点。

如果您需要它更灵活,或者为您创建目标文件夹,那么编写脚本会更好。

答案 2 :(得分:0)

我在这里使用了mv命令。因为你开始时说“我必须移动一些文件”......但是你可以把它改成cp ......两者的结构是一样的... |esed表达式的结尾导致sed生成的脚本自动执行。你实际上并没有看到脚本,所以我在这篇文章的末尾添加了它... ... mkdir -p将检查目录是否已经存在,如果它不存在,那么它就成功了。如果mkdir失败,则不会执行下一个命令。

# use `find' to get the main list of files.. 
# use `sed' to filter when both 'NNN's match in: /mediaNNN/NNN...
# `sed' also build and executes the *move* script

basepath1=/var/www/media_test1/
basepath2=/var/www/media_test2/

find $basepath1/media[0-9][0-9][0-9] \
      -type f -name '[0-9][0-9][0-9]*.jpg' |
sed -nr "
s|$basepath1(/media([0-9]{3})/)\2.*|\
mkdir -p \"$basepath2\1\" \&\&\n\
   mv -n \"&\" \\\\\n\
         \"$basepath2\1\"|e"

这是生成的脚本

mkdir -p "/var/www/media_test2/media001/" &&
   mv -n "/var/www/media_test1/media001/001_pm_001.jpg" \
         "/var/www/media_test2/media001/"
mkdir -p "/var/www/media_test2/media002/" &&
   mv -n "/var/www/media_test1/media002/002_pm_001.jpg" \
         "/var/www/media_test2/media002/"
mkdir -p "/var/www/media_test2/media003/" &&
   mv -n "/var/www/media_test1/media003/003_pm_001.jpg" \
         "/var/www/media_test2/media003/"
mkdir -p "/var/www/media_test2/media004/" &&
   mv -n "/var/www/media_test1/media004/004_pm_001.jpg" \
         "/var/www/media_test2/media004/"