目录
编写 shell 脚本,将当前目录下大于 10K 的文件转移到./tmp 目录下
法一:直接在文件夹里find,然后移入指定文件夹
法二:先find出目标文件,再循环放入
法三:文件夹里循环找目标文件,判断语句有点绕,用了du与cut
法四:利用ls与awk配合管道循环里将目标文件放入
#!/bin/bash
read -p "Please enter the directory_name you want to store" directory_name
#read与用户交互,让用户输入文件名,-p是将用户输入的文件名传给directory_name
if [ ! -d "./${directory_name}" ];then
#判断这个目录是否存在,不存在就创建
mkdir ./${directory_name}
fi
find . -type f -size +10k -exec mv {} ./${directory_name} \;
find
命令用于查找文件.
表示查找当前目录下的文件,也可以指定其他目录-type f
表示只查找普通文件,不包括目录等其他特殊文件类型-size +10k
表示查找大小大于 10K 的文件,+ 表示查找大于等于 10K 的文件,- 表示查找小于等于 10K 的文件-exec
表示对查找到的文件执行后续命令cp {} ./tmp \;
表示将查找到的文件复制到 ./tmp 目录下,{}
表示查找到的文件名,\;
表示命令结束,注意需要加上空格。补充:
vim下撤销刚才编辑操作:
进入normal模式后按u
如何用ls判断一个目录中是否有另一个目录
ls /path/to/directory 2>/dev/null
如果目录不存在,ls 命令的错误输出将被重定向到 /dev/null 中,不会在终端上显示。如果目录存在,则 ls 命令会将目录下的内容打印到终端上。
如何将一个目录中所有文件转移到上一级目录中
可以使用mv命令将一个目录中所有文件转移到上一级目录中。假设当前目录为/path/to/dir,需要将该目录中的所有文件移动到/path/to目录下,则可以使用以下命令:
mv /path/to/dir/* /path/to/
这个命令会将/path/to/dir目录下的所有文件移动到/path/to目录下,而不包括子目录。如果目标目录中有同名文件,会提示是否覆盖,需要手动确认。如果想要自动覆盖目标目录中的同名文件,可以使用-f选项,即:
mv -f /path/to/dir/* /path/to/
#!/bin/bash
#先判断文件是否存在
if [ ! -d "tmp" ];then
mkdir -p tmp
fi
files=`find ./ -size +10k`
for items in $files
do
mv $items tmp
done
#!/bin/bash
# 遍历当前目录下的所有文件
for file in *
do
# 判断文件是否大于 10K
if [ -f "$file" ] && [ $(du -k "$file" | cut -f1) -gt 10 ]
then
# 将文件移动到 ./tmp 目录下
mv "$file" ./tmp
fi
done
if [ -f "$file" ] && [ $(du -k "$file" | cut -f1) -gt 10 ]
这个条件语句是用来判断一个文件是否存在且大小是否大于10KB。具体解释如下:
因此,这个条件语句的意思是:如果$file存在且为普通文件,且文件大小大于10KB,则条件成立。
#!/bin/bash
# 列出当前目录下的所有文件,并使用 awk 过滤出大小大于 10K 的文件
ls -l | awk '$5 > 10240 {print $9}' | while read file
do
# 将文件复制到 ./tmp 目录下
mv "$file" ./tmp
done
awk '$5 > 10240 {print $9}'
awk '$5 > 10240 {print $9}'
:使用awk命令查找当前目录中大小超过10KB的文件,并输出这些文件的路径。
因为ls中列出的第五个字段$5是文件大小,单位为字节,而第九个字段是文件路径
while read file
:
逐行读取awk命令的输出,并将当前行的内容保存到file
变量中。