1

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

这是我的文件夹结构

/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

我在想的是创建一个我想移动的图像列表,方法是使用 sls命令列出所有图片+它们没有的路径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
...

然后执行命令。

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

有没有更好的方法来做到这一点?关于我可以使用哪些命令的任何想法?

谢谢

4

3 回答 3

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/。

于 2012-04-19T17:21:48.497 回答
1

mmv如果您不需要它太灵活,您可以使用它:

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

但是,这不会创建目标文件夹;你必须先这样做。

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

于 2012-04-19T17:28:39.253 回答
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/"
于 2012-04-19T19:01:39.047 回答