请原谅我,因为我对shell脚本和awk非常陌生。我一直在尝试创建一个播放列表,在Mplayer中播放我的一些音乐,但它只有在指定每个文件的完整路径时才有效。我一直在尝试设置一个小shell脚本,在每个文件名之前插入$pwd的输出,并将其写入播放列表,如下所示:
ls | awk '{system("pwd") | getline x; grep -v 0; gsub("n",""); print x"/"$1}' > playlist.txt
(grep是为了消除system("pwd")输出的"0"状态)。但是,在x中有一个换行符,所以我得到输出
/home/(directory)
/Song_1.mp3
/home/(directory)
/Song_2.mp3
我想要的是
/home/(directory)/Song_1.mp3
/home/(directory)/Song_2.mp3
正如其他人所回答的那样,还有其他方法可以获得op中请求的完全限定路径。
对于那些将Awk用于其他目的并需要工作目录的人,Awk可以通过ENVIRON
数组访问环境变量。您可以通过ENVIRON["PWD"]
访问它。
目录是完全限定的,所以请求的/home/(directory)/filename.mp3
可能不像预期的那样工作。即使这样,也应该有一个用于OP目的的一行代码:
ls -1 | awk '{ print(ENVIRON["PWD"] "/" $0); }' > playlist.txt
您可以这样使用printf
:
printf "%sn" "$PWD"/*
OR else your awk:
printf "%sn" * | awk 'BEGIN{"pwd"|getline d} {print d "/" $0}'
不使用awk或任何东西,但我认为这是你想要的吗?
find -printf ""$PWD/%f"n"
你可能正在尝试这样做吗?
ls -1 ${PWD}/*.mp3
或
find "${PWD}" -maxdepth 1 -name "*.mp3" -print
或
for f in ${PWD}/*.mp3
do
echo "${f}"
done
你也可以做
find $(pwd) -maxdepth 1