相关疑难解决方法(0)

在bash脚本中在文件扩展名之前附加字符串

我需要在bash脚本中扩展文件之前添加一个数字.例如,我想将文件名名称" abc.efg" 转换为" abc.001.efg.问题是我不知道文件的扩展名是什么(它是脚本的参数之一).

我一直在寻找最快捷的方式.

提前致谢,

bash

6
推荐指数
1
解决办法
5326
查看次数

在Linux上从ARM转换为*.hex到*.bin

我想使用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.

感谢帮助!

linux binary hex file-conversion stm32f4discovery

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

删除除文件扩展名以外的所

假设我有一个字符串:

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)

这将删除最长的匹配,直到"." 但不知何故,它只是返回完整的字符串而不删除任何东西?

linux bash

5
推荐指数
1
解决办法
188
查看次数

在不解析符号链接的情况下获取完整路径?

如何获取符号链接的完整路径而不将其解析为原始文件的路径?

例如,如果我有一个这样设置的目录:

~$ 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)

bash

5
推荐指数
2
解决办法
975
查看次数

如何使用python使用magic bytes来识别文件

我遇到了一个问题,其中指出:

我们已经提取了一个外星人 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)

显然我做错了什么,但我不知道它是什么。是循环的问题吗?我该如何使用魔术字节来识别文件?

python byte file

5
推荐指数
1
解决办法
9523
查看次数

如何在跳过一些文件和目录时集中移动文件

我正在尝试编写一个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.

我想我可以重命名文件夹,但是其他脚本已经为他们的工作分配了这些文件夹,因此重命名可能会给我带来更多麻烦.我也可以添加文件夹名称,但每当有人创建文件夹时,我都必须将其名称添加到脚本中,否则它也会被移动.

如何改进此脚本以跳过所有文件夹?

bash shell glob

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

Bash如何重用找到的文件名?

我想在目录中运行一个脚本,以便为每个找到的点文件生成一个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

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

在 bash 中查找路径顶级目录的最佳方法

我需要一个命令来返回 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

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

将基本名称的输出通过管道传输到字符串替换

我需要作为 bash 脚本的参数给出的文件的基本名称。基本名称应去掉其文件扩展名。让我们假设$1 = "/somefolder/andanotherfolder/myfile.txt",期望的输出是"myfile"

当前的尝试创建了一个我想避免的中间变量:

BASE=$(basename "$1")
NOEXT="${BASE%.*}"
Run Code Online (Sandbox Code Playgroud)

我尝试将其作为单行代码,通过管道输出 basename 的输出。但是,我不知道如何将标准输出传输到字符串替换。

编辑:这需要适用于可能具有不同长度的多个文件扩展名,因此字符串替换尝试如上所述。

bash file-extension pipe string-substitution basename

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

Bash - 获取文件扩展名

我正在编写一个脚本,它将按扩展名对文件进行排序.我知道一种方法可以通过文件名来实现.问题是,相同的文件名称中没有扩展名.例如,如果我有文件:file.txt通过简单获得扩展没有问题extension="${filename##*.}".但如果文件名只是filename这种方法不起作用.是否还有其他选项可以获取文件的扩展名并将其置于Bash脚本中的变量中?

string bash filenames

2
推荐指数
4
解决办法
5489
查看次数