本文目录导读:

Bash 脚本方法
基础批量创建
#!/bin/bash
# 源文件目录
target_dir="/path/to/source/files"
# 链接存放目录
link_dir="/path/to/links"
# 创建链接目录
mkdir -p "$link_dir"
# 批量创建软链接
for file in "$target_dir"/*; do
if [ -f "$file" ]; then
filename=$(basename "$file")
ln -s "$file" "$link_dir/$filename"
echo "创建链接: $filename"
fi
done
指定文件列表
#!/bin/bash
# 从文件列表创建
while IFS= read -r source_file; do
if [ -f "$source_file" ]; then
filename=$(basename "$source_file")
ln -s "$source_file" "/links/$filename"
fi
done < file_list.txt
使用 find 命令
查找并创建链接
# 批量创建所有 .txt 文件的软链接
find /path/to/source -name "*.txt" -exec sh -c '
for file; do
ln -s "$file" "/links/$(basename "$file")"
done
' sh {} +
更复杂的选择
# 查找最近7天修改的文件并创建链接
find /path/to/source -mtime -7 -type f -exec sh -c '
for file; do
ln -s "$file" "/links/$(basename "$file")"
done
' sh {} +
高级脚本示例
带参数和错误检查
#!/bin/bash
# 批量创建软链接脚本
# 用法: ./create_links.sh <源目录> <链接目录> [文件类型]
source_dir="${1:-./files}"
link_dir="${2:-./links}"
file_type="${3:-*}"
# 检查源目录
if [ ! -d "$source_dir" ]; then
echo "错误: 源目录不存在"
exit 1
fi
# 创建链接目录
mkdir -p "$link_dir"
# 计数器
success=0
fail=0
# 批量处理
for file in "$source_dir"/$file_type; do
if [ -f "$file" ]; then
filename=$(basename "$file")
link_path="$link_dir/$filename"
# 检查是否存在现有链接
if [ -L "$link_path" ]; then
echo "跳过: $filename (已存在)"
continue
fi
if ln -s "$file" "$link_path" 2>/dev/null; then
echo "创建成功: $filename"
((success++))
else
echo "创建失败: $filename"
((fail++))
fi
fi
done
echo "完成: $success 成功, $fail 失败"
特定场景示例
按模式匹配重命名链接
#!/bin/bash
# 为文件添加前缀或后缀
src_dir="/data/files"
link_dir="/data/links"
prefix="link_"
for file in "$src_dir"/*.txt; do
if [ -f "$file" ]; then
base=$(basename "$file" .txt)
ln -s "$file" "$link_dir/${prefix}${base}.link"
fi
done
批量创建目录的软链接
#!/bin/bash
# 创建多个目录的软链接
source_dirs=(
"/path/to/dir1"
"/path/to/dir2"
"/path/to/dir3"
)
link_dir="/links"
for dir in "${source_dirs[@]}"; do
if [ -d "$dir" ]; then
dirname=$(basename "$dir")
ln -s "$dir" "$link_dir/$dirname"
echo "创建目录链接: $dirname"
fi
done
一行命令版本
# 当前目录所有文件创建软链接到/target
for f in *; do [ -f "$f" ] && ln -s "$PWD/$f" /target/; done
# 特定扩展名
for f in *.jpg *.png; do ln -s "$PWD/$f" /links/; done
# 使用xargs
ls *.txt | xargs -I {} ln -s "$PWD/{}" /links/{}
注意事项
- 路径问题: 使用绝对路径避免链接失效
- 覆盖检查: 使用
-f或-n参数控制覆盖行为 - 权限问题: 确保有足够权限创建链接
- 备份: 批量操作前建议先测试
选择哪种方法取决于你的具体需求:简单的可以一行命令,复杂的建议使用脚本并添加错误处理。