【问题标题】:Moving file to another directory while adding underscore and inode number在添加下划线和 inode 编号时将文件移动到另一个目录
【发布时间】:2015-06-17 03:58:28
【问题描述】:

我正在通过添加类似于回收站的功能来模仿 rm 行为。这是我的代码到目前为止的样子:

#!/bin/bash

# tests if bin does not exist and if true, create it
binName=$HOME/deleted

if [ ! -d $binName ]
then
        mkdir $binName
else
        echo "recycle bin exists"
fi

if [ $# -eq 0 ] ; then
        echo "No argument passed"
elif [ -d $1 ] ; then
        echo "is dir"
elif [ ! -e $1 ] ; then
        echo "does not exist"
else
        mv $1 $binName
fi

我正在努力在移动文件的末尾添加一个低于分数和 inode 编号,以避免 bin 目录中的重复文件错误。我尝试使用 link 中的大括号扩展,但它会导致错误。

【问题讨论】:

  • 你使用的是什么操作系统?
  • 出于好奇,如果用户将两个硬链接“回收”到具有相同基本名称的同一个底层文件,你会怎么做?例如。 mkdir foo; mkdir bar; touch foo/a; ln foo/a bar/; recycle foo/a; recycle bar/a?
  • 我在 windows 7 上使用 putty ssh 进入我的 unix 环境
  • @pilcrow 我这周才开始学习 unix - 我基本上正在构建两个脚本,一个将文件移动到回收站目录,另一个将文件恢复到其原始位置,由隐藏将包含源信息的文件。老实说,我不明白硬链接是什么
  • @Singh,欢迎来到 Unix!这是一个不错的地方。当我们的意思是多个文件指向同一个 inode 时,我们谈论“硬链接”。在这种情况下,文件将具有相同的 inode 编号:您的脚本将要“回收”foo/a$HOME/deleted/a_12345(或其他)和 bar/a$HOME/deleted/a_12345

标签: bash shell unix mv inode


【解决方案1】:

ls试试这个:

inode=$(ls -id "${1}" | cut -d " " -f 1)
mv "$1" "${binName}/${1}_${inode}"

stat:

inode=$(stat --printf %i "${1}")
mv "$1" "${binName}/${1}_${inode}"

GNU find:

inode=$(find -maxdepth 1 -name "${1}" -printf "%i")
mv "$1" "${binName}/${1}_${inode}"

【讨论】:

  • 嗨,cyrus,非常感谢,在您的帮助下,我现在可以使用它了。真的很感激!
【解决方案2】:

在您链接的问题的accepted answer 中,大括号扩展用于避免重复原始文件名。 (它会作为源名称出现一次,作为目标名称的一部分出现。)在您的情况下,这将毫无意义,因为您已经在具有短名称 $1 的变量中拥有名称。

所以你可以

mv $1 $binName/${1}_$(${command that gives the inode of} $1)

例如作为@Cyrus suggested

mv $1 "${binName}/${1}_"$(find . -maxdepth 1 -name "${1}" -printf "%i")

仍然可以使用大括号扩展来避免“$1”的重复之一,但这只会使命令更难阅读。

关于创建目录的注意事项:

代替

if [ ! -d $binName ]
then
        mkdir $binName
fi

你可以简单地使用

mkdir -p $binName

如果目录已经存在,这将使目录保持不变。如果还缺少任何父目录,它也会根据需要创建它们。但是,它当然无法输出“回收站存在”,但我猜你只是出于调试/演示的原因才这样做。

【讨论】:

  • 嗨,das-g,非常感谢您的 cmets - 在编写脚本时我会牢记它们 - 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 2019-09-26
相关资源
最近更新 更多