标签: basename

shellcheck 建议不要使用 basename:为什么?

我正在尝试shellcheck

我有类似的东西

basename "${OPENSSL}" 
Run Code Online (Sandbox Code Playgroud)

我得到以下建议

Use parameter expansion instead, such as ${var##*/}.
Run Code Online (Sandbox Code Playgroud)

从实际的角度来看,我认为没有区别

$ export OPENSSL=/opt/local/bin/openssl
$ basename ${OPENSSL}
openssl
$ echo ${OPENSSL##*/}
openssl
Run Code Online (Sandbox Code Playgroud)

由于basenamePOSIX 规范中,我不知道为什么它应该是最佳实践。任何提示?

shell filenames posix basename

28
推荐指数
2
解决办法
2088
查看次数

dirname 和 basename vs 参数扩展

是否有任何客观理由偏爱一种形式而不是另一种形式?性能、可靠性、便携性?

filename=/some/long/path/to/a_file

parentdir_v1="${filename%/*}"
parentdir_v2="$(dirname "$filename")"

basename_v1="${filename##*/}"
basename_v2="$(basename "$filename")"

echo "$parentdir_v1"
echo "$parentdir_v2"
echo "$basename_v1"
echo "$basename_v2"
Run Code Online (Sandbox Code Playgroud)

产生:

/some/long/path/to
/some/long/path/to
a_file
a_file
Run Code Online (Sandbox Code Playgroud)

(v1 使用 shell 参数扩展,v2 使用外部二进制文件。)

shell shell-script filenames basename variable

24
推荐指数
3
解决办法
3万
查看次数

使用 basename 解析文件中保存的路径列表

我正在运行 Mac OSX 并尝试使用命令行来查找我拥有的同名文件的数量。

我尝试使用以下命令:

find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files
Run Code Online (Sandbox Code Playgroud)

它不起作用!当我执行以下操作时:

find ~ -type f -name "*" -print > duplicate_files
Run Code Online (Sandbox Code Playgroud)

然后duplicate_files 确实包含我所有文件的路径。所以我认为问题在于basename- 它不接受标准输入。然后我尝试了以下方法:

basename $(find ~ -type f -name "*" -print) > duplicate_files
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。在互联网上搜索似乎并没有带来多少乐趣。任何想法最受欢迎。

osx duplicate find filenames basename

12
推荐指数
3
解决办法
2万
查看次数

在 find -exec 中使用 basename?

如果我只使用 basename {} .txt,它会起作用:

find . -iname "*.txt" -exec basename {} .txt \;
Run Code Online (Sandbox Code Playgroud)

它只会打印 xxx 而不是 ./xxx.txt

如果我想在 -exec 选项中使用 $(basename {} .txt) ,它将失败:

find . -iname "*.txt" -exec echo "$(basename {} .txt)" \;
Run Code Online (Sandbox Code Playgroud)

它只会打印 ./xxx.txt

我怎么解决这个问题?我希望我可以$(basename {} .txt)用作其他 cmd 的参数。我必须用 xargs做sh -c或管道-exec basename {} \;吗?

find basename

6
推荐指数
3
解决办法
2万
查看次数

你如何称呼文件“happy-dog.png”的“happy-dog”部分?

我刚刚意识到我不知道如何file调用file.ext

整体file.ext称为文件或文件名,ext称为扩展名,但您如何称呼file部分本身file.ext

例如happy-dog.png。所有的文件/文件名都是happy-dog.png,扩展名是,png但你怎么称呼happy-dog

这不是基名。和title一样吗?还是文件部分?有任何想法吗?

terminology filenames files basename

6
推荐指数
2
解决办法
527
查看次数

在 find 命令的 basename 上执行

假设我有一个目录结构如下

test
test/a
test/b
Run Code Online (Sandbox Code Playgroud)

现在我想执行一个命令,这样.我就可以在文件夹中对文件的基本名称ab.

所以基本上,我想要这样的东西,我天真地尝试过

find test -type f -exec touch `basename {}` \;
Run Code Online (Sandbox Code Playgroud)

只是,这不会导致空文件ab父目录。假设我的 touch 命令只能接受一个参数。

这将导致这样的目录结构

a
b
test
test/a
test/b
Run Code Online (Sandbox Code Playgroud)

我知道如何在 bash 脚本中执行此操作,但我对单命令解决方案感兴趣。

command-line find basename

4
推荐指数
1
解决办法
8209
查看次数

删除多个可能的后缀

示例:我想创建一个快速命令来缩小图像(对于我的文件浏览器)。

...
FN="/tmp/some-image.jpg"
gm convert "$FN" -resize 50% "$(dirname $FN)/$(basename $FN .jpg/png/gif).jpg"
...
Run Code Online (Sandbox Code Playgroud)

如何指定应删除多个后缀?

shell basename

4
推荐指数
1
解决办法
5511
查看次数

该命令 find 不适用于 sh 文件中的 -name 选项

我正在使用以下命令来检索名称包含的文件数svjson远程服务器中给定目录中的文件数:

nbs_files=`ssh -q -i ${sshkey} ${user}@${server} "find ${path}/ -maxdepth 1 -mindepth 1 -type f -name '*sv*' -o -name '*.json' -exec basename {} \; | wc -l"` 
Run Code Online (Sandbox Code Playgroud)

此命令仅返回.json文件数,而sv名称中包含的文件存在于${path}.

当我删除该-o -name '*.json'部分时,该命令运行良好,并返回名称中包含“sv”的文件数。

有谁知道如何修改命令以检索sv其名称中包含的文件.json以及带有扩展名的文件?

shell find shell-script basename

4
推荐指数
1
解决办法
228
查看次数

连接 pwd 和基本名称

我想将路径和文件名分配给变量:

/path/to/myfile/file.txt
Run Code Online (Sandbox Code Playgroud)

例如

MYFILE=$(pwd)$(basename)
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?

linux bash basename pwd

3
推荐指数
1
解决办法
1万
查看次数

带有基本名称的 find -exec 命令选项

我有以下 JPEG 文件:

$ ls -l
-rw-r--r-- 1 user group 384065 janv. 21 12:10 CamScanner 01-10-2022 14.54.jpg
-rw-r--r-- 1 user group 200892 janv. 10 14:55 CamScanner 01-10-2022 14.55.jpg
-rw-r--r-- 1 user group 283821 janv. 21 12:10 CamScanner 01-10-2022 14.56.jpg
Run Code Online (Sandbox Code Playgroud)

我用来$ img2pdf将每个图像转换为 PDF 文件。要做到这一点 :

$ find . -type f -name "*.jpg" -exec img2pdf "{}" --output $(basename {} .jpg).pdf \;
Run Code Online (Sandbox Code Playgroud)

结果 :

$ ls -l *.pdf
-rw-r--r-- 1 user group 385060 janv. 21 13:06 CamScanner 01-10-2022 14.54.jpg.pdf
-rw-r--r-- 1 …
Run Code Online (Sandbox Code Playgroud)

find options basename

3
推荐指数
1
解决办法
1101
查看次数