我需要收集文件列表并将其放入文本文件中。但是,文件不应包含其扩展名。
我现在使用的不删除文件扩展名的命令是:
ls -1 /a/dir/*/dir/* > textfile
所有选定文件的扩展名均为 .[az]{3}
(我需要这个的原因是因为我需要一个唯一的基本名称列表,并将unique
在此步骤之后解决这个问题)
答案1
我总是喜欢包含仅 bash 的解决方案:
for file in /a/dir/*/dir/*; do
echo "${file%.*}" >> ~/file_list
done
并使用可选的 if 语句将文件限制为您请求的扩展名:
shopt -s extglob
for file in /a/dir/*/dir/*; do
if [[ "$file" =~ \.[a-zA-Z]{3}$ ]]; then
echo "${file%.*}" >> ~/file_list
fi
done
在这个类似的服务器故障问题我解释一下“${file%.*}”参数扩展。
答案2
类似这样的操作会列出当前目录中的文件并删除第一个点之后的所有内容。
find . -maxdepth 1 -type f | xargs -iZ basename Z | cut -d"." -f1 > /tmp/resultfile
最终,隐藏文件会导致结果文件中出现空白行。Basename 仅用于删除以“./”开头的文件名寻找结果。
答案3
怎么样:
ls -1 /a/dir/*/dir/* | sed -e 's/\.[a-zA-Z0-9]\{3\}$//'
應該做你想做的事。
答案4
更通用的答案是找到任意长度的扩展:
find . -type f | sed 's/^.*\.\([^.]*\)$/\1/'
然后我使用以下命令获取目录中的扩展列表:
find . -type f | sed 's/^.*\.\([^.]*\)$/\1/' | sort | uniq -c | sort -n