Shell:删除意外添加到每个文件的其他.csv扩展

时间:2016-06-02 22:34:34

标签: macos shell

我的shell脚本路径出错,并且意外地在比预期的小文件夹更大的文件集上运行此shell脚本:

 find . -type f -exec mv '{}' '{}'.csv \;

可以想象,它为许多文件添加了额外的.csv,无论它们之前是什么:.pdf,.xlsx,.mp3,.zip,.csv等等。它找到了。一个非常大的,不幸的错误。

有没有办法可以通过运行类似的代码从每个文件末尾删除附加的.csv来解决这个问题?我能做的任何事情都不能恢复到我上次的备份,这比我想要的要长得多。谢谢你的帮助。

-

修改

我很遗憾地发现有些文件最后有一个以上的.csv(例如,一个文件可能是.pdf.csv而另一个文件可能是.mp4.csv.csv.csv)。

是否可以编写此命令以仅在第一个.和文件名之后查找.并删除之后的任何其他.csv?这样,如果文件只是.csv,则应将其保留为.csv,如果文件为.csv.csv,则应将其更改为.csv,如果文件是.pdf.csv.csv.csv { {1}}它应该将其更改为.pdf(例如)。基本上,我想要的只是第一个扩展名,如果该扩展名为.csv或多个.csv(因为某些文件位于.csv.csv.csv.csv),则删除其后的所有内容。

期望的结果

一些shell脚本会使我的所有文件都改为:

mv ./.downloads/worktable1.csv.csv ./.downloads/worktable1.csv
mv ./.bash_history.csv.csv.csv.csv.csv.csv ./.bash_history
mv ./Application Support/AddressBook/Configuration.plist.csv.csv ./Application Support/AddressBook/Configuration.plist
mv ./Application Support/Google/Chrome/DEFAULT/Bookmarks.csv.csv.csv ./Application Support/Google/Chrome/DEFAULT/Bookmarks
mv ./.dropbox/instance1/host.dbx.csv.csv.csv.csv.csv ./.dropbox/instance1/host.dbx
mv ./.qgis2/python/plugins/processing/tests/data/lines.dbf.csv.csv ./.qgis2/python/plugins/processing/tests/data/lines.dbf

非常确定它在最后添加了多个.csv,因为它应该在文件夹被激活时运行,但我不知道为什么有些扩展名不同于其他扩展名。希望我们能够找出这种模式,但似乎最难的是区分没有文件扩展名的文件。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此find命令:

find . -name '*.*.csv' -exec bash -c 'echo mv "$1" "${1/.csv*/}"' - '{}' \;

从每个文件中删除所有.csv个扩展名。

一旦您对输出感到满意,只需在echo之前删除mv