是否有一系列命令可以删除备份文件?我想做像
这样的事情ls | grep -v *~
但是这显示了不同行中的所有文件,任何一个使输出与ls相同的文件?
当我输入" man ls"我的ls手册页有-B的选项
-B Force printing of non-printable characters (as defined by ctype(3)
and current locale settings) in file names as \xxx, where xxx is the
numeric value of the character in octal.
它与你展示的那个不同,我搜索了忽略但没有弹出结果。顺便说一下,我在Mac上,可能有不同版本的ls?
或者,我可以告诉目录停止制作备份文件吗?
答案 0 :(得分:9)
假设来自GNU coreutils的ls
,
-B, --ignore-backups do not list implied entries ending with ~
您还可以在Bash中设置FIGNORE='~'
,以便*
永远不会扩展为包含以~
结尾的文件名。
答案 1 :(得分:3)
您可以列出以~
结尾的所有文件:
ls -d *[^~]
*[^~]
指定所有未以~
结尾的文件。 -d
标志告诉ls
不要显示它匹配的任何目录的目录内容(与默认的ls
命令一样)。
修改:如果您将ls
设为别名以使用上述命令,则会违反标准ls
用法,因此如果您使用ephemient的解决方案,最好希望您的ls
用法始终排除备份文件。
答案 2 :(得分:0)
对于被迫使用ls
并且没有-B
的人(例如,在Mac OS X中使用BSD ls),您可以为基于bash函数的bash函数创建别名Mansoor Siddiqui的建议。如果您将以下函数添加到bash配置文件中,其中保留了别名(.bash_profile
,.profile
,.bashrc
,.bash_aliases
或等效内容:
ls_no_hidden() {
nonflagcount=0
ARG_ARRAY=(${@})
flags="-l"
curdir=`pwd`
shopt -s nullglob
# Iterate through args, find all flags (arg starting with dash (-))
for (( i = 0; i < $# ; i++ )); do
if [[ ${ARG_ARRAY[${i}]} == -* ]]; then
flags="${flags} ${ARG_ARRAY[${i}]}";
else
((nonflagcount++));
fi
done
if [[ $nonflagcount -eq 0 ]]; then
# ls current directory if no non-flag args provided
FILES=`echo *[^~#]`
# check if files are present, before calling ls
# to suppress errors if no matches.
if [[ -n $FILES ]]; then
ls $flags -d *[^~#]
fi
else
# loop through all args, and run ls for each non-flag
for (( i = 0; i < $# ; i++ )); do
if [[ ${ARG_ARRAY[${i}]} != -* ]]; then
# if directory, enter the directory
if [[ -d ${ARG_ARRAY[${i}]} ]]; then
cd ${ARG_ARRAY[${i}]}
# check that the cd was successful before calling ls
if [[ $? -eq 0 ]]; then
pwd # print directory you are listing (feel free to comment out)
FILES=`echo *[^~#]`
if [[ -n $FILES ]]; then
ls $flags -d *[^~#]
fi
cd $curdir
fi
else
# if file list the file
if [[ -f ${ARG_ARRAY[${i}]} ]]; then
ls $flags ${ARG_ARRAY[${i}]}
else
echo "Directory/File not found: ${ARG_ARRAY[${i}]}"
fi
fi
fi
done
fi
}
alias l=ls_no_hidden
然后l
将映射到ls
,但不会显示以~
或#
结尾的文件。