在 ~/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}"
尾随,然后删除前面的 (+ 空格)。这会将数字保留在变量中。.jpg
target="${target_part#Photo }"
Photo
target
然后,您只需将文件移动到以 中的数字开头的目录target
,即mv "$f" -t "${target} "*
。这假设只有一个以每个数字开头的文件名,并且它是一个目录。
更多信息
您的脚本存在一些问题。首先,shebang是错误的。而不是!#
,应该是#!
。
其次,我不确定是否只是一个拼写错误,但双引号应该是"
,而不是“
。
我也不确定为什么*
在你的参数替换中${f%Photo*}
,也不知道变量$sub
引用了什么(它从未被分配)。
最后,我更喜欢直接进入循环,而不是使用~/Desktop/a/*.jpg
for 循环,cd
以便更轻松地进行参数替换。