Skip to content

文件操作

Shell 提供了丰富的文件操作命令,用于创建、复制、移动、删除和查看文件。

创建文件

bash
# 创建空文件(touch)
touch file.txt
touch file1.txt file2.txt

# 更新文件时间戳
touch -t 202401010000 file.txt

# 通过重定向创建文件
echo "内容" > file.txt
> file.txt          # 创建空文件或清空已有文件

# heredoc 创建多行文件
cat > file.txt << 'EOF'
第一行
第二行
第三行
EOF

复制文件

bash
# 基本复制
cp source.txt dest.txt

# 复制到目录
cp file.txt /tmp/

# 复制多个文件到目录
cp file1.txt file2.txt /tmp/

# 递归复制目录
cp -r source_dir/ dest_dir/

# 保留文件属性(时间戳、权限等)
cp -p source.txt dest.txt

# 交互式(覆盖前询问)
cp -i source.txt dest.txt

# 显示复制过程
cp -v source.txt dest.txt

移动与重命名

bash
# 重命名文件
mv old_name.txt new_name.txt

# 移动文件到目录
mv file.txt /tmp/

# 移动多个文件
mv file1.txt file2.txt /tmp/

# 交互式(覆盖前询问)
mv -i source.txt dest.txt

# 显示移动过程
mv -v source.txt dest.txt

删除文件

bash
# 删除文件
rm file.txt

# 删除多个文件
rm file1.txt file2.txt

# 交互式删除(询问确认)
rm -i file.txt

# 强制删除(不提示)
rm -f file.txt

# 递归删除目录及内容
rm -rf directory/

# 删除匹配模式的文件
rm -f *.log
rm -f temp_*

查看文件内容

bash
# 查看全部内容
cat file.txt

# 显示行号
cat -n file.txt

# 查看前 N 行
head -n 20 file.txt
head -20 file.txt

# 查看后 N 行
tail -n 20 file.txt
tail -20 file.txt

# 实时监控文件追加(适合查看日志)
tail -f /var/log/syslog

# 分页查看
less file.txt
more file.txt

文件链接

bash
# 创建硬链接
ln source.txt link.txt

# 创建符号链接(软链接)
ln -s /path/to/source link_name

# 查看链接指向
readlink link_name
ls -la link_name

文件信息

bash
# 查看文件详细信息(inode、时间戳等)
stat file.txt

# 查看文件类型
file file.txt
file /bin/bash

# 查看文件大小
du -h file.txt
du -sh directory/

# 查看磁盘使用情况
df -h

在脚本中的常见模式

bash
#!/bin/bash

# 安全删除(先判断再删除)
safe_delete() {
    local file="$1"
    if [ -f "$file" ]; then
        rm "$file" && echo "已删除:$file"
    else
        echo "文件不存在:$file"
    fi
}

# 安全复制(目标目录不存在则创建)
safe_copy() {
    local src="$1"
    local dest_dir="$2"
    mkdir -p "$dest_dir"
    cp "$src" "$dest_dir/"
}

# 备份文件(追加时间戳)
backup_file() {
    local file="$1"
    local timestamp=$(date +%Y%m%d_%H%M%S)
    cp "$file" "${file}.${timestamp}.bak"
    echo "已备份:${file}.${timestamp}.bak"
}

safe_delete "/tmp/test.txt"
safe_copy "config.txt" "/backup"
backup_file "important.conf"