Shell 仅提取文件名的脚本

Shell Script to extract only file name

我有这样的文件格式 (publishfile.txt)

drwxrwx---+  h655201 supergroup          0  2019-04-24  09:16  /data/xyz/invisible/se/raw_data/OMEGA
drwxrwx---+  h655201 supergroup          0  2019-04-24  09:16  /data/xyz/invisible/se/raw_data/sample
drwxrwx---+  h655201 supergroup          0  2019-04-24  09:16  /data/xyz/invisible/se/raw_data/sample(1)

我只想提取名字OMEGA****,sample,sample(1)如何 我可以这样做吗?我在我的代码中使用了 basename,但它在 for 循环中不起作用。这是我的示例代码

for line in $(cat $BASE_PATH/publishfile.txt)
do 
      FILE_PATH=$(echo "line"| awk '{print  $NF}' )
done
FILE_NAME=($basename  $FILEPATH)

但是这段代码在 for 循环之外使用时也不起作用

试试这个:

cat $BASE_PATH/publishfile.txt | awk '{print }' | sed 's/.*\///'

输出将是:

OMEGA
sample
sample(1)

更新:我想 cat x.txt | sed 's/.*\///' 仍然有效,如果您的所有文件、文件夹至少包含 1 个斜杠 (/)。

使用的命令,手册为:cat, awk, sed

你上面的代码有错别字。您的代码如下:

    FILE_NAME=($basename  $FILEPATH)

但应该是

    FILE_NAME=$(basename  $FILEPATH)

这应该在循环内或循环外都能正常工作

awk -F / '{ print $NF }' "$BASE_PATH"/publishfile.txt

这只是说定界符是斜杠,我们想要每行的最后一个字段。

你基本上不应该 运行 Awk 在 shell while read 循环中的每个输入行上(更不用说 a for loop);Awk 本身默认这样做,速度要快得多比 shell.

更好