使用重命名程序严重破坏了我的一些文件。我正在尝试让它们恢复正常。
我有这样的文件结构:
./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
开关将保护您免于覆盖任何内容。