Heyo家伙
所以我想移动所有包含名称的文件" American"和"爸爸"进入"电视节目中的相应文件夹"夹。我以为我有一个解决方案,但最终它没有成功。由于" *"我得到的论点太多了。在if论证中(至少我认为这是问题)。
我可以以某种方式超越"太多的论点" ?我应该尝试一种完全不同的方法吗?
提前致谢
这是代码的摘录
if [ -d *Game* ] && [ -d *Thrones*]; then
game=( $(find *Game* -maxdepth 0))
mv ${game[@]} ../TV\ Shows/Game*/*s04
elif [ -d *American* ] && [ -d *Dad*] ] ; then
dad=( $(find *American* -maxdepth 0))
mv ${dad[@]} ../TV\ Shows/American*/*.9
答案 0 :(得分:1)
确实问题是[ -d *Game* ]
与[ -d "Game_of_Thrones_S04E01.mkv" "Game_of_Thrones_S04E02.mkv" ... ]
无效。
如果您要移动与*Game*
或*Thrones*
匹配的所有文件,您可以改为:
shopt -s nullglob # Handle the case of having no matches
# shopt -s nocaseglob # Uncomment to match case insensitively
for f in *Game* *Thrones*
do
mv "$f" "../TV Shows/"Game*/*s04
done
for f in *American* *Dad*
do
mv "$f" "../TV Shows/"American*/*.9
done
答案 1 :(得分:1)
这应该更接近你想要的东西:
find *Game* *Thrones* -maxdepth 0 -exec mv {} ../TV\ Shows/Game\ of\ Thrones/ \;
find *American* *Dad* -maxdepth 0 -exec mv {} ../TV\ Shows/American\ Dad/ \;
我从*
命令的目标位置删除了mv
,因为这很可能不符合您的预期。 mv
命令会将所有指定的名称移动到 last 参数中。