我必须将一些文件从一个目录移动到另一个目录,但这有点棘手。
这是我的文件夹结构
/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
...
然后执行命令。
问题是我不知道如何编写这些命令。
有更好的方法吗?关于我可以使用哪些命令的任何想法?
感谢
答案 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
......两者的结构是一样的... |e
在sed
表达式的结尾导致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/"