それは重複した質問かもしれませんが、私はこの解決策を見つけることができませんでした私はあるディレクトリから別のディレクトリに最後の3ヶ月のファイルをコピーしたいのですが、次のコマンドを使用してファイルを一覧表示することしかできませんでした。
find . -mtime -90 -ls
-mtime
を使用してファイルをコピーする方法が本当にわかりません。私はLinuxが初めてなので、助けてください。
find
には-exec
オプションを使用します。
find . -mtime -90 -exec cp {} targetdir \;
-exec
は、find
によって返されたすべての結果を指定されたディレクトリ(上記の例ではtargetdir
)にコピーします。
特定の日数に戻る以外に、正確な日付と時刻を選択することもできます
cp `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER
上記は、2016年9月18日20:05:00以降に作成されたディレクトリ内のすべてのファイルをFOLDERにコピーします(今日の3か月前:)
Findコマンドのシンボルには注意してください、これはこれではありません: 'これ、バックティック: `日付選択はこれです:'
名前にスペース、改行、タブ、またはワイルドカードを含むファイルがある場合は、StéphaneChazelasのソリューションのいずれかを使用できます。1つ目はGNU用、2つ目はGNUまたはいくつかのBSD用です:
find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} +
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "$@" FOLDER' sh {} +
次のコマンドを使用します。
for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
最初にファイルのリストを一時的に保存し、ループを使用すると思います。
find . -mtime -90 -ls >/tmp/copy.todo.txt
リストが大きすぎない場合は、リストを読むことができます。
for f in `cat /tmp/copy.todo.txt`;
do echo $f;
done
注:cat ...を囲む引用符は逆引用符で、多くの場合キーボードの左上隅にあります
その後、エコーコマンドをコピーコマンドに置き換えることができます。
for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done
例:2017年9月8日を選択
ls -l
-rw-rw-rw- 1 root system 943 Aug 09 02:59 File
for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
do
mv $j $Destination;
done