如何从 bash 获取文件扩展名?这是我尝试过的:
filename=`basename $filepath`
fileext=${filename##*.}
Run Code Online (Sandbox Code Playgroud)
通过这样做,我可以bz2从路径中获得扩展名/dir/subdir/file.bz2,但是我的路径有问题/dir/subdir/file-1.0.tar.bz2。
如果可能的话,我更喜欢只使用 bash 而不使用外部程序的解决方案。
为了让我的问题更清楚,我正在创建一个 bash 脚本,只需通过extract path_to_file. 如何提取文件由脚本通过查看其压缩或存档类型来确定,可能是 .tar.gz、.gz、.bz2 等。我认为这应该涉及字符串操作,例如,如果我得到扩展名,.gz那么我应该检查它.tar之前是否有字符串.gz- 如果有,扩展名应该是.tar.gz.
我有几个文件在文件名中存在编码问题(德语变音,用 Windows 刻录在 CD 上,由 Windows 读取并使用 Seafile 同步到 Linux。有些地方出了问题......)。Bash 和 zsh 只显示“?” 而不是变音,stat显示类似
$ stat Erg?nzung.doc
File: ‘Erg\344nzung.doc’
Size: 2609152 Blocks: 5096 IO Block: 4096 regular file
Device: 806h/2054d Inode: 12321475 Links: 1
Run Code Online (Sandbox Code Playgroud)
我只能使用自动完成功能输入文件名。如何重命名文件?LibreOffice(或其他文件类型的其他程序)似乎无法读取受影响的文件,他们抱怨“没有这样的文件或设备”。
我在想mv --by-inode 12321475 Ergänzung.doc,但没有--by-inode开关mv。我还可以做些什么?
到目前为止,我找到了一个解决方案,可以大量更改所有这些烦人的文件名,使它们可读且更易于在命令行中操作。
于是我在众多命令中发现了一个叫做detox的小软件。默认情况下,它将空格替换为_。通读手册页并没有给我一个答案,如何使排毒重命名文件用-, 替换空格。
[/] cd test
one five/ one four/ one one/ one three/ one two/
[test] detox *
[test] l
one_five/ one_four/ one_one/ one_three/ one_two/
[test]
Run Code Online (Sandbox Code Playgroud)
怎么做?
我找不到.detoxrc文件(或与该程序相关的任何文件),如果我创建它,我不知道要在其中放入什么。
PS 除了排毒之外还有其他方法吗?