假设我在当前目录中有以下文件:
1.jpg
1original.jpg
2.jpg
2original.jpg
3.jpg
4.jpg
Run Code Online (Sandbox Code Playgroud)
是否有一个终端/ bash/linux命令可以做类似的事情
if the file [an integer]original.jpg exists,
then move [an integer].jpg and [an integer]original.jpg to another directory.
Run Code Online (Sandbox Code Playgroud)
执行这样的命令将导致1.jpg,1original.jpg,2.jpg和2original.jpg位于他们自己的目录中.
注意 这不一定是一个命令.我可以是简单命令的组合.也许就像将原始文件复制到新目录一样.然后对newdir中的文件执行一些正则表达式过滤,以获取旧目录中仍需要复制的文件名列表等.
启用扩展的glob支持将允许您编写类似正则表达式的模式.这可以处理具有多位整数的文件,例如'87 .jpg'和'87original.jpg'.然后可以使用Bash参数扩展从找到的文件的名称中删除"原始",以允许您将两个相关文件一起移动.
shopt -s extglob
for f in +([[:digit:]])original.jpg; do
mv $f ${f/original/} otherDirectory
done
Run Code Online (Sandbox Code Playgroud)
在扩展模式中,+( x )匹配括号内的一个或多个事物,类似于正则表达式x+.这里x是任何数字.因此,我们匹配当前目录中名称由1个或多个数字后跟"original.jpg"的所有文件.
${f/original/}是一个bash模式替换的例子.它从值中删除第一次出现的字符串"original" f.所以如果f是字符串"1original.jpg",则${f/original/}字符串为"1.jpg".
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |