存在しない場合にのみ移動する方法で使用できますかmv file1 file2
?file1
file2
file2
頑張った
yes n | mv -i file1 file2
(これはmv
file2を上書きする必要があるかどうかを尋ね、自動的に「いいえ」と答えます)-i
。これは別の値です)
答え1
mv -vn file1 file2
。このコマンドは必要に応じて機能します。-v
必要に応じてスキップできます。
-v
冗長にしてください - mvはファイルを移動したかどうかを教えてくれます(ファイルが移動されない可能性があるため便利です)
-n
file2が存在しない場合にのみ移動します。
しかし、参考にしてください。これはPOSIXではありません〜のようにトーマス・ディッキーが言及した。
答え2
mv -n
man mv
GNUシステムから:
-n, --no-clobber
既存のファイルを上書きしません。
FreeBSDシステムの場合:
-n
既存のファイルを上書きしないでください。 (-n オプションは、以前の -f または -i オプションよりも優先されます。)
答え3
if [ ! -e file2 ] && [ ! -L file2 ]
then
mv file1 file2
# else echo >&2 there is already a file2 file.
fi
または:
if ! ls -d file2 > /dev/null 2>&1
then
mv file1 file2
fi
mv
file2
存在しない場合にのみ実行してください。 aがテストとの間に作成された可能性があるため、aが上書きfile2
されないという保証はありません。ただし、少なくとも最新バージョンのGNUはその保証を提供していません(たとえ検査が行われるため、競合条件はより狭くなりますが)。 )以内に完了しました。file2
mv
mv
-i
-n
mv
一方、移植性に優れているため、ファイルタイプfile2
(一般、パイプ、ファイル形式)に関係なく、さまざまなケースを区別できます。目次)。
答え4
test -e name
名前が存在する場合(ファイル、ディレクトリ、またはシンボリックリンクに関係なく)trueを返すwhichを使用することもできます。
たとえば、
touch file
mkdir dir
ln -s file symlink
test -e file && echo file exists
test -e dir && echo dir exists
test -e symlink && echo symlink exists
test -e file || echo you wont see this echo
test -e doesnotexist || echo doesnotexist does not exist...