终端 sed 进入 .command 文件

终端 sed 进入 .command 文件

我有这个脚本来删除文件夹中每个文件的前 4 行(如果它们的扩展名是).txt

我希望能够将包含该脚本的 file.command 放在同一个文件夹中,这样我只需双击它并执行它即可。

因此我创建了一个文件,内容如下:

#!/bin/bash

find . -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

如果我运行该文件,我的所有 Mac txt 文件中的 4 行都会被删除 :(

我以为它find .应该留在同一个文件夹中......

我该如何修复它以便使命令仅在 file.command 所在的文件夹中运行?

答案1

此代码:

find . -maxdepth 1 -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

确实有效,问题是:

  1. 使用该命令创建的文件不是executable为了执行该操作而创建的:

    chmod +x file.command
    
  2. 然后从终端运行命令:

    ./file.command
    

答案2

正如已经评论过的,find默认情况下进入子目录。

这样做:

#!/bin/bash
cd "$(dirname "$0")"          # change directory to the location of the script
for file in *.txt; do         # and iterate over the .txt files
    sed -i.bak '1,4d' "$file"
done

相关内容