Bash 脚本根据匹配的 ID 号将文件移动到文件夹中?

Bash 脚本根据匹配的 ID 号将文件移动到文件夹中?

在 ~/Desktop/a/ 上,我有具有以下模式的文件和文件夹:

 500 photodir
 Photo 500.jpg
 1000 origindir
 Photo 1000.jpg

我希望将 .jpg 移至其文件夹中,并使用数字作为 ID 标记:

 500 photodir/Photo 500.jpg
 1000 origindir/Photo 1000.jpg

这是到目前为止的代码:

!#/bin/bash/
for f in ~/Desktop/a/*.jpg
do
  base=“${f%Photo*}”
  mv "$f" "$base/"
  mv "$sub/$f"* "$base/$sub/"
done

答案1

#!/bin/bash
cd ~/Desktop/a/
for f in *.jpg; do
  target_part="${f%.jpg}"
  target="${target_part#Photo }"
  mv "$f" -t "${target} "*
done

解释

那里有两个参数替换发生在这里。首先,删除文件名中的target_part="${f%.jpg}"尾随,然后删除前面的 (+ 空格)。这会将数字保留在变量中。.jpgtarget="${target_part#Photo }"Phototarget

然后,您只需将文件移动到以 中的数字开头的目录target,即mv "$f" -t "${target} "*。这假设只有一个以每个数字开头的文件名,并且它是一个目录。

更多信息

您的脚本存在一些问题。首先,shebang是错误的。而不是!#,应该是#!

其次,我不确定是否只是一个拼写错误,但双引号应该是",而不是

我也不确定为什么*在你的参数替换中${f%Photo*},也不知道变量$sub引用了什么(它从未被分配)。

最后,我更喜欢直接进入循环,而不是使用~/Desktop/a/*.jpgfor 循环,cd以便更轻松地进行参数替换。

相关内容