奇怪的mv操作

mac*_*cek 2 bash command-line find 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 多个文件上,否则我会手动完成。任何可能的帮助?

whi*_*ark 5

试试这个shell魔法:

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

或者作为单线:

for i in *.*; do mv -n "$i" "$(dirname */"$(basename "$i" .ext2)".*)"; done
Run Code Online (Sandbox Code Playgroud)

前:

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
Run Code Online (Sandbox Code Playgroud)

后:

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
Run Code Online (Sandbox Code Playgroud)

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