Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在mv命令中嵌入bash命令_Linux_Bash_Shell - Fatal编程技术网

Linux 在mv命令中嵌入bash命令

Linux 在mv命令中嵌入bash命令,linux,bash,shell,Linux,Bash,Shell,我有一个目录,其中包含具有以下格式的文件列表: 240-1.ts 240-2.ts 360-1.ts 360-2.ts 现在,我想实现一个bash命令,该命令匹配以“240”开头的文件,并对它们进行重命名,使这些文件看起来像“240-human-readable-timestampX.ts”,而不是'240-timestampX.ts' 我尝试了以下方法: find . -maxdepth 1 -mmin +5 -type f -name "240*" -exec mv $0 {$

我有一个目录,其中包含具有以下格式的文件列表:

  • 240-1.ts
  • 240-2.ts
  • 360-1.ts
  • 360-2.ts
现在,我想实现一个bash命令,该命令匹配以“240”开头的文件,并对它们进行重命名,使这些文件看起来像“240-human-readable-timestampX.ts”,而不是'240-timestampX.ts'

我尝试了以下方法:

find . -maxdepth 1 -mmin +5 -type f -name "240*"
    -exec mv $0 {$0/240-***and here I want to insert
    either stat -c %y filename or date -d @timestampX***} '{}' \;
我被困在这里是因为我不知道是否可以在mv命令中嵌入bash命令。我知道这项任务可能看起来有点混乱和过于复杂,但我想知道是否有可能这样做。当然,我可以创建一个bash脚本,该脚本将遍历目录中的所有文件,同时通过更改它们各自的名称来循环它们,但不知何故,我认为单个命令会更有效(即使可读性较差)

  • 操作系统是Linux Ubuntu 12.04.5
  • 炮弹爆炸了

感谢您和提出的解决方案。你的两个答案都完成了任务;然而,由于我的问题和凯纳沃兹的答案之间的相似程度,我将凯纳沃兹的答案标记为被接受的答案。即使确实可以通过省略find命令以更简洁的方式进行操作,在我的情况下也有必要使用相应的命令,因为我需要查找早于X个时间单位的文件。再次感谢你们两位

在bash中,如果所有文件都在一个目录中,则根本不需要使用
find
。您可以执行for循环:

for file in 240-*; do
    hr_timestamp=$(date -d $(echo "$file" | sed 's/.*-\([0-9]*\)\.ts/\1/'))
    mv "$file" "240-$hr_timestamp.ts"
done

在bash中,如果所有文件都在一个目录中,则根本不需要使用
find
。您可以执行for循环:

for file in 240-*; do
    hr_timestamp=$(date -d $(echo "$file" | sed 's/.*-\([0-9]*\)\.ts/\1/'))
    mv "$file" "240-$hr_timestamp.ts"
done

如果要保留
mmin
选项,可以使用
find
并使用
xargs
使用bash命令处理找到的文件:

find . -maxdepth 1 -mmin +5 -type f -name "240*.ts" | xargs -L 1 bash -c 'mv "${1}" "240-$(stat -c %y ${1}).ts"' \;

如果要保留
mmin
选项,可以使用
find
并使用
xargs
使用bash命令处理找到的文件:

find . -maxdepth 1 -mmin +5 -type f -name "240*.ts" | xargs -L 1 bash -c 'mv "${1}" "240-$(stat -c %y ${1}).ts"' \;

制作一个小脚本,“包装”所有
mv
活动,并使用
$1
等变量来接收变量。祝你好运。制作一个小脚本“包装”所有
mv
活动,并使用
$1
等变量来接收变量。祝你好运,我们怎么办?我们需要创建一个单独的
.sh
文件,然后像这样运行它:
/script.sh
?您可以直接在shell中键入它。我通常在for循环中的每个命令后用一行分号来表示。但是你也可以做多行。我们如何运行它?我们需要创建一个单独的
.sh
文件,然后像这样运行它:
/script.sh
?您可以直接在shell中键入它。我通常在for循环中的每个命令后用一行分号来表示。但是你也可以做多行。