我的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
,因为它应该在文件夹被激活时运行,但我不知道为什么有些扩展名不同于其他扩展名。希望我们能够找出这种模式,但似乎最难的是区分没有文件扩展名的文件。
有什么建议吗?
答案 0 :(得分:1)
您可以使用此find
命令:
find . -name '*.*.csv' -exec bash -c 'echo mv "$1" "${1/.csv*/}"' - '{}' \;
从每个文件中删除所有.csv
个扩展名。
一旦您对输出感到满意,只需在echo
之前删除mv