目录中有一堆文件, old_dir 。我想:
如何使用Bash脚本执行此操作?无法将各个部分放在一起。
答案 0 :(得分:0)
#!/usr/bin/env bash
old_dir="/path/to/somewhere"
new_dir="/path/to/somewhere_else"
prefix="new_"
if [ ! -d "$old_dir" -o ! -d "$new_dir" ]; then
echo "ERROR: We're missing a directory. Aborting." >&2
exit 1
fi
for file in "$old_dir"/*; do
tail +2 "$file" > "$new_dir"/"${prefix}${file##*/}"
done
这一点的重要部分是:
for
循环,允许您处理每个$file
。tail +2
这是应该删除文件第一行的符号。如果您的tail
不支持此功能,则可以使用sed -e 1d
获得相同的结果。${file##*/}
功能上等同于basename "$file"
,但不会产生孩子。真的,这些都不是特定于bash的。您可以在大多数操作系统中的/bin/sh
中运行它。
请注意,上面的代码旨在解释进程。一旦理解了这个过程,您就可以提出更快,更短的策略来实现同样的目标。例如:
find "$old_dir" -depth 1 -type f -exec sh -c "tail +2 \"{}\" > \"$new_dir/$prefix\$(basename {})\"" \;
注意:我还没有测试过这个。如果您打算使用这些解决方案中的任何一种,请确保在尝试之前了解它们,这样您就不会意外地破坏数据。