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 多个文件上,否则我会手动完成。任何可能的帮助?
试试这个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开关将保护您免于覆盖任何内容。
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |