离奇的mv操作

离奇的mv操作

使用重命名程序严重破坏了我的一些文件。我正在尝试让它们恢复正常。

我有这样的文件结构:

./Hello World/some-filename.ext
./Kitty Parade/another.ext
./Third Example/abc.ext
./some-filename.ext2
./another.ext2
./abc.ext2

目标是将当前文件夹(./)中的文件移回其原始文件夹。

例如:
another.ext2属于./Kitty Parade/文件夹
some-filename.ext2属于./Hello World/文件夹
abc.ex2属于./Third Example/文件夹`

该规则可以描述如下:如果当前文件夹 ( ) 中存在文件,则查找包含具有相同文件名(但扩展名不同)的文件的文件夹并将其移动到该文件夹​​。注意:和该文件的./之间没有可靠的关系。./myFilename./originalFolderName

超过 4,000 个文件都出现了这种情况,否则我会手动执行。有什么帮助吗?

答案1

尝试一下这个贝壳魔法:

for i in *.*; do
  BASE=$(basename "$i" .ext2)
  LIST=*/"${BASE}".*
  DIR=$(dirname "${LIST}")
  mv -n "$i" "${DIR}"
done

或者一句话:

for i in *.*; do mv -n "$i" "$(dirname */"$(basename "$i" .ext2)".*)"; done

前:

whitequark@forth:~/test$ ls *
test 1.ext2  test 2.ext2  test 3.ext2

f 1:
test 1.ext

f 2:
test 2.ext  test 3.ext

后:

whitequark@forth:~/test$ ls *
f 1:
test 1.ext  test 1.ext2

f 2:
test 2.ext  test 2.ext2  test 3.ext  test 3.ext2

-n开关将保护您免于覆盖任何内容。

相关内容