我正在编写一个脚本,它将按扩展名对文件进行排序。我知道一个按文件名进行操作的方法。问题是,相同的文件名称中没有扩展名。例如,如果我有文件:file.txt
,通过简单的extension="${filename##*.}"
获得扩展名没有问题。但是,如果文件名只是filename
,此方法不起作用。是否有任何其他选项来获取文件的扩展名并将其放到Bash脚本中的变量中?Bash - 获取文件的扩展
1
A
回答
0
看来你只问如何把一个文件名的文件扩展名到一个变量在bash ,而你并没有问及分拣部分。 为此,以下简短脚本可以从文件列表中打印每个文件的扩展名。
#!/bin/sh
filesInCurrentDir=`ls`
for file in $filesInCurrentDir; do
extention=`sed 's/^\w\+.//' <<< "$file"`
echo "the extention for $file is: "$extention #for debugging
done
包含当前分析文件扩展名的变量名为extention
。命令sed 's/^\w\+.//
匹配任意长度的字符,直到找到文件名中的第一个点,然后将其删除。因此,如果存在多个文件扩展名,则这些全部列出(例如,file.txt
->获得延伸txt
,但是file.odt.pdf
->获得延伸odt.pdf
)。
例
当前文件夹的内容(可以是文件的任何空间分隔的列表,你喂的循环)以上脚本的
aaab.png
abra
anme2.jpg
cadabra
file
file.png
file.txt
loacker.png
myText
name.pdf
rusty.jgp
结果:
the extention of aaab.png is: png
the extention of abra is:
the extention of anme2.jpg is: jpg
the extention of cadabra is:
the extention of file is:
the extention of file.png is: png
the extention of file.txt is: txt
the extention of loacker.png is: png
the extention of myText is:
the extention of name.pdf is: pdf
the extention of rusty.jgp is: jgp
在这样,没有扩展名的文件将导致扩展变量为空。
1
filename="file.txt"
ext="${filename##*.}"
if [[ "$ext" != "$filename" ]]; then echo "$ext"; else echo "no extension"; fi
输出:
txt
filename="file"
ext="${filename##*.}"
if [[ "$ext" != "$filename" ]]; then echo "$ext"; else echo "no extension"; fi
输出:
no extension
+0
但问题是,名称中没有扩展名的这些文件是例如txt或jpg文件,我应该将它们放到正确的文件夹中。 – Sigger
3
没有bash化等[[
:
case $filename in
(*.*) extension=${filename##*.};;
(*) extension="";;
esac
适用于任何伯恩遗产贝壳。
2
您可以通过去除扩展获取文件的基本名称,删除是从原来的。
base=${filename%.*}
ext=${filename#$base.}
虽然我更喜欢case
声明;意图更清晰。
1
对于情况,如:
$ ls file*
file1 file1.txt file2
你可以这样做:
$ ls file* |awk -F. '{print (NF>1?$NF:"no extension")}'
no extension
txt
no extension
相关问题
- 1. 从文件获取扩展
- 2. Bash脚本获取所需的扩展名的所有文件
- 3. 文件名扩展在bash
- 4. 使用bash脚本获取文件扩展名
- 5. 获取文件的扩展名(编辑)
- 6. 使用preg_replace获取文件扩展名
- 7. 从文件中获取扩展属性
- 8. 获取文件扩展名 - jquery
- 9. 获取缓存文件镀铬扩展
- 10. asp.net mvc HttpPostedFileBase获取文件扩展名
- 11. 从文件url中获取扩展
- 12. Angularjs如何获取文件扩展名?
- 13. Smarty获取文件扩展名
- 14. 获取文件扩展名C
- 15. PHP,获取文件名没有扩展
- 16. 从文件扩展名获取ImageFormat
- 17. Primefaces FileUpload获取文件扩展名
- 18. FileUpload获取文件扩展名
- 19. 如何从Bash中的变量读取文件扩展名?
- 20. 获取由OpenFileDialog选择的文件的文件扩展名
- 21. 在bash中提取位置文件名和扩展名
- 22. Objective-C:获取文件类型支持的文件扩展名
- 23. 用Python获取文件名和扩展名为hdfs的文件
- 24. Python:获取包含特定文件扩展名的文件夹
- 25. 获取Chrome中扩展文件夹内的本地文件
- 26. php:从损坏的文件中获取文件扩展名
- 27. 获取文件的扩展名,但不在路径中提供扩展名
- 28. 通过文件扩展名获取扩展名和图标的最快方法?
- 29. 参数扩展bash
- 30. bash FUNCNAME值扩展
谁downvotes:如果你能解释我什么是错的,我可以检讨我的答案。 – FedericoCapaldo
虽然我还没有投票给你,我需要告诉你,你的解决方案很容易中断。只需运行'touch“文件spaced.txt”'并测试你的代码。此外谷歌周围你为什么不应该解析'ls'的输出以及如何在for和globing文件中循环(例如'for file in *') - 另一个灰点是当bash配备参数扩展时使用sed可以为您带来所需的结果。就像在卢娜公园使用机枪来赢得泰迪熊。而且不是所有的'sed'版本都是一样的。 –