如何在linux shell上按文件名长度复制文件? 我必须将文件名长度为14的所有文件从一个非常大的目录复制到另一个文件。 提前谢谢!
答案 0 :(得分:3)
您可以使用globbing(文件名扩展):
你可以使用14吗?和* *为扩展名:
cp ??????????????.* /you/destination/dir
答案 1 :(得分:2)
将此find
与-regex
:
find . -regextype posix-extended -regex '\./.{14}\..*' -print0 | xargs -0 -I % cp % /dest/
find -E
代替。-maxdepth 1
递归,请使用find
。答案 2 :(得分:1)
使用类似
的内容 case $filename in
??????????????.*)
# do something with $filename when it has 14 characters and some extension
;;
*)
# otherwise
;;
esac
你可以将上面的内容放在一个足够的for filename in *
循环中。
答案 3 :(得分:1)
只需使用
cp ??????????????.* /to/somewhere
^^^^^^^^^^^^^^ 14x
答案 4 :(得分:1)
您可以简单地使用:
cp ??????????????.* /destination/directory/path
没有。 "?"应该等于你想要的文件名长度。 " *"包括所有扩展名。
答案 5 :(得分:1)
如果要包含目录,可以这样做:
for file in *; do
name="${file%.*}"
[ ${#name} -eq 14 ] && cp -r "$file" /to/location
done
仅适用于文件:
for file in *; do
name="${file%.*}"
[ -f "$file" ] && [ ${#name} -eq 14 ] && cp "$file" /to/location
done
答案 6 :(得分:0)
data_dir=/09ccd9c864194bb2990088348369f291
cd ${data_dir}
for f in *
do
len=${#f}
if [ ${len} -le 80 ] # if the file name is less than 80
then
echo ${f}
# cp your files to some where
fi
done