我需要在bash脚本中扩展文件之前添加一个数字.例如,我想将文件名名称" abc.efg" 转换为" abc.001.efg.问题是我不知道文件的扩展名是什么(它是脚本的参数之一).
我一直在寻找最快捷的方式.
提前致谢,
我想使用st-flash命令将程序上传到我的STM32F4 Discovery板.问题是,当我尝试上传*.hex或*.elf文件时,它只是无法正常工作.我尝试了很多方法(比如使用xxd)从*.elf或*.hex转换为*.bin但是当我上传它时仍然无法正常工作.是的,我尝试从其他Windows计算机上传hex文件,它的工作原理.
hex文件的示例(前三行,只是为了向您展示它的内容):
:020000040800F2
:100000000000022099020008A1020008A5020008D1
:10001000A9020008AD020008B102000800000000BB
Run Code Online (Sandbox Code Playgroud)
我的操作系统是Ubuntu 14.04 LTS.
感谢帮助!
假设我有一个字符串:
x=file.tar.sh
Run Code Online (Sandbox Code Playgroud)
我知道除了最后的n个字符之外如何删除所有内容.像这样(除去最后3个字符的所有内容:
${x: -3}
Run Code Online (Sandbox Code Playgroud)
但这对于具有不同后缀长度的文件不起作用.(len .tar!= len .sh)
我会通过删除所有内容直到最后一个点来解决这个问题.我试过这个:
${x##.}
Run Code Online (Sandbox Code Playgroud)
这将删除最长的匹配,直到"." 但不知何故,它只是返回完整的字符串而不删除任何东西?
如何获取符号链接的完整路径而不将其解析为原始文件的路径?
例如,如果我有一个这样设置的目录:
~$ tree analysis_results/
analysis_results/
`-- Sample1
`-- bar.txt -> /Users/me/foo.txt
Run Code Online (Sandbox Code Playgroud)
如果我尝试获取 的完整路径bar.txt,我最终会得到以下路径foo.txt:
~$ readlink -f analysis_results/Sample1/bar.txt
/Users/me/foo.txt
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是:
/Users/me/analysis_results/Sample1/bar.txt
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来实现这一点?看起来我没有realpath可用的,不确定该程序是否执行此操作,或者是否有其他一些类似的命令。
当我pwd是这样的时候事情变得更加复杂:
/Users/me/analysis/peaks/workflow/code
Run Code Online (Sandbox Code Playgroud)
但我想阅读符号链接的完整路径,如:
/Users/me/analysis/alignment/results/Sample1/bar.txt
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,其中指出:
我们已经提取了一个外星人 zip 文件,它是一堆 PNG 文件,但我们认为其中只有一个是有效的。使用 magic byte 来确定它是哪一个。提示:查找并读取正确的文件以获取标志。
所有 png 文件都存储在 /tmp 目录中。经过几次尝试解决这个问题后,我只得到了到目前为止。我的代码运行良好,但打印no每个文件时,根据我的代码,没有一个文件是正确的。
到目前为止,这是我的代码:
import glob,os
magic_numbers = {'.png': bytes([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])}
max_read_size = max(len(m) for m in magic_numbers.values()) # get max size of magic numbers of the dict
os.chdir("/tmp")
for x in glob.glob("*.png"):
with open(x, 'rb') as fd:
file_head = fd.read(max_read_size)
if file_head.startswith(magic_numbers['.png']):
print("It's a PNG File")
else:
print("no")
Run Code Online (Sandbox Code Playgroud)
显然我做错了什么,但我不知道它是什么。是循环的问题吗?我该如何使用魔术字节来识别文件?
我正在尝试编写一个shell脚本来移动所有文件,除了以.sh 和结尾的文件.py.我也不想移动目录.
这是我到目前为止所得到的:
cd FILES/user/folder
shopt -s extglob
mv !(*.sh|*.py) MoveFolder/ 2>/dev/null
shopt -u extglob
Run Code Online (Sandbox Code Playgroud)
这将移动除包含.sh或的所有文件以外的所有文件.py,但所有目录也会移入MoveFolder.
我想我可以重命名文件夹,但是其他脚本已经为他们的工作分配了这些文件夹,因此重命名可能会给我带来更多麻烦.我也可以添加文件夹名称,但每当有人创建文件夹时,我都必须将其名称添加到脚本中,否则它也会被移动.
如何改进此脚本以跳过所有文件夹?
我想在目录中运行一个脚本,以便为每个找到的点文件生成一个svg文件.就像是:
find . -name "*.dot" -exec dot -Tsvg \{} \;
Run Code Online (Sandbox Code Playgroud)
这工作正常但只是在stdout上输出结果.通常我使用重定向来生成svg文件.如何获取点文件名以在重定向中使用它
find . -name "*.dot" -exec dot -Tsvg > "$dotfilename".svg \{} \;
Run Code Online (Sandbox Code Playgroud) 我需要一个命令来返回 bash 中指定路径的顶级基本目录。
我有一个可行的方法,但看起来很丑:
echo "/go/src/github.myco.com/viper-ace/psn-router" | cut -d "/" -f 2 | xargs printf "/%s"
Run Code Online (Sandbox Code Playgroud)
似乎有更好的方法,但是我见过的所有替代方法似乎都更糟糕。
感谢您的任何建议!
我需要作为 bash 脚本的参数给出的文件的基本名称。基本名称应去掉其文件扩展名。让我们假设$1 = "/somefolder/andanotherfolder/myfile.txt",期望的输出是"myfile"。
当前的尝试创建了一个我想避免的中间变量:
BASE=$(basename "$1")
NOEXT="${BASE%.*}"
Run Code Online (Sandbox Code Playgroud)
我尝试将其作为单行代码,通过管道输出 basename 的输出。但是,我不知道如何将标准输出传输到字符串替换。
编辑:这需要适用于可能具有不同长度的多个文件扩展名,因此字符串替换尝试如上所述。
我正在编写一个脚本,它将按扩展名对文件进行排序.我知道一种方法可以通过文件名来实现.问题是,相同的文件名称中没有扩展名.例如,如果我有文件:file.txt通过简单获得扩展没有问题extension="${filename##*.}".但如果文件名只是filename这种方法不起作用.是否还有其他选项可以获取文件的扩展名并将其置于Bash脚本中的变量中?